恢复Nuget参考?

max*_*axp 179 nuget visual-studio-2012

我在Visual Studio 2012中有解决方案和项目.

该项目packages.config在项目的根目录中有一个文件.

出于这个问题的目的,我们假设我不小心从References项目的部分删除了这些库.

进入NuGet包管理器时,界面仍在报告这些包旁边的刻度,表示它们已安装.

我可以看到如何解决这种情况的唯一方法是删除所有条目packages.config,这将解决NuGet接口报告它们已安装的问题,并重新添加每个条目.

有更聪明的方法吗?我曾希望启用"启用nuget来恢复丢失的包"可以解决这个问题,但它似乎无法做任何事情.

小智 327

尝试重新安装软件包.

在NuGet包管理器控制台中,输入以下命令:

Update-Package -Reinstall -ProjectName Your.Project.Name

如果要重新安装软件包并恢复整个解决方案的引用,请省略该-ProjectName参数.

  • 注意:此命令将重新安装当前在Visual Studio中打开的*all*项目的引用,而不仅仅是在控制台中选择的项目. (17认同)
  • 极度危险!!!! 如果进程中断,您将丢失所有包引用,并且需要逐个添加到解决方案中的每个项目. (13认同)
  • 该链接的英文翻译:http://translate.google.com/translate?sl = es&tl = en&js = n&prev = _t&hl = en&ie = UTF-8&lastf = 1&u = http%3A%2F%2Fwww.overflowexception.es%2F2013% 2F03%2Freinstalar-paquetes-DE-nuget.html (10认同)
  • 此命令将在整个解决方案中重新安装软件包,而不仅仅是在选定的项目中! (3认同)
  • @BillVelasquez这件事只是吃了我所有的参考资料.嗯,感谢上帝的git,我想. (2认同)
  • 记下`-Project`开关**将仅为已识别的特定项目重新安装. (2认同)

Gan*_*Gan 44

您需要在VS解决方案级别启用NuGet包还原才能使还原缺失包正常工作.

在此输入图像描述

  • 这将允许NuGet将缺失的包重新下载到.\ packages \目录中,但与恢复缺少的*项目引用*无关,这就是海报所询问的内容. (43认同)

Joh*_*ton 13

如果这对某人有帮助,对我来说,上述情况都不够.我仍然无法建立,VS仍然找不到参考.关键是在恢复包之后关闭并重新打开解决方案.

这是场景(使用Visual Studio 2012):

您打开一个缺少包的解决方案.参考文献显示VS无法找到它们.有许多方法可以恢复丢失的包,包括

  • 构建设置为自动还原的解决方案
  • 打开软件包管理器控制台,然后单击漂亮的"恢复"按钮
  • 这样做nuget restore,如果你已经安装了命令行的NuGet

但无论采用何种方法,这些参考文献仍将显示为缺失.当你构建它将失败.叹.然而,如果你关闭解决方案并重新打开它,现在VS <HintPath>再次检查那些好的,发现包裹回到他们所属的地方,并且一切都很好.

更新

Visual Studio 仍然没有看到你有包吗?仍然显示它无法解决的参考?确保您还原的软件包版本与<HintPath>.csproj文件中的软件包版本完全相同.即使是小错误修复号(例如1.10.1到1.10.2)也会导致引用失败.您可以通过直接编辑csproj xml来修复此问题,或者通过删除引用并使新的指针指向packages目录中新恢复的版本来解决此问题.


Jur*_*uri 11

虽然@jmfenoll提供的解决方案有效,但它会更新到最新的软件包.在我的情况下,安装了beta2(预发行版),它将所有的库更新为RC1(有一个bug).因此,上述解决方案只完成了一半的工作.

如果您和我一样处于同样的状态,并且您希望将项目与您在/中指定的NuGet软件包的确切版本同步packages.config,那么此脚本可能会对您有所帮助.只需将其复制并粘贴到您的Package Manager控制台即可

function Sync-References([string]$PackageId) {
  get-project -all | %{
    $proj = $_ ;
    Write-Host $proj.name; 
    get-package -project $proj.name | ? { $_.id -match $PackageId } | % { 
      Write-Host $_.id; 
      uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force ;
      install-package -projectname $proj.name -id $_.id -version $_.version
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后使用像这样的特殊包名执行它

Sync-References AutoMapper
Run Code Online (Sandbox Code Playgroud)

或者对于所有包裹

Sync-References
Run Code Online (Sandbox Code Playgroud)

积分转到Dan Haywood他的博客文章.


Bra*_*bby 8

可以在"包管理器控制台"窗口中运行以下脚本,并在重新安装之前从解决方案中的每个项目中删除所有包.

foreach ($project in Get-Project -All) { 
    $packages = Get-Package -ProjectName $project.ProjectName
    foreach ($package in $packages) {
        Uninstall-Package $package.Id -Force -ProjectName $project.ProjectName
    }
    foreach ($package in $packages) {
        Install-Package $package.Id -ProjectName $project.ProjectName -Version $package.Version
    }
}
Run Code Online (Sandbox Code Playgroud)

这将再次运行每个包的安装脚本,这将恢复缺少的程序集引用.不幸的是,安装脚本所能做的所有其他事情 - 比如创建文件和修改配置 - 也会再次发生.您可能希望从一个干净的工作副本开始,并使用您的SCM工具来选择要保留的项目中的哪些更改以及要忽略的更改.