我有一个包含多个项目的解决方案。大多数第三方引用都缺失了,但是有一些包。每个项目的配置文件。我如何得到NuGet安装/更新所有需要的包?这需要通过命令行为每个项目完成吗?


当前回答

对于那些因为构建服务器遇到这个问题而到达这里的人,您可以创建一个MSBuild目标,运行exec命令来运行nuget恢复命令,如下所示(在这种情况下,nuget.exe在.nuget文件夹中,而不是在路径上),然后可以在构建解决方案之前立即在TeamCity构建步骤中运行

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>

其他回答

在最新的NuGet 2.5版本中,包管理器中现在有一个“更新全部”按钮:http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once

这里有另一个解决方案,如果你正在使用网站项目,或不想启用NuGet包恢复。

您可以使用包管理器控制台来枚举包中的所有包。配置文件并重新安装。

# read the packages.config file into an XML object
[xml]$packages = gc packages.config

# install each package 
$packages.packages.package | % { Install-Package -id $($_.id) -Version $($_.version) }

不知道从什么时候开始,但在VS2019中你可以用一种更简单的方式来做:

在解决方案资源管理器中右键单击解决方案 为解决方案选择管理Nuget包 有4个选项卡,浏览,安装,更新,合并 合并显示是否有任何项目使用不同版本的包(在大多数情况下,这就是为什么我们要更新所有的包) “更新”显示任何项目中是否有可用的更新。选择全部并单击更新,任务将完成。

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

这是我找到的最好最简单的例子。它将重新安装在包中列出的所有块。配置,它将保留当前版本。用项目名称替换YourProjectNameGoesHere。

我认为您需要做的第一件事是启用包恢复特性。也可以在这里看到。这是在解决方案(而不是项目)级别上完成的。

但这并不能解决所有问题——在启用恢复功能后,我遇到了类似的问题。(VS2013, NuGet 2.8)

事实证明,当我提交项目时,我已经(无意地)将包提交给了源代码控制——但是Visual Studio(和源代码控制插件)在执行签入时忽略了二进制文件。

当我创建一个发布分支时,问题出现了。我在dev/main/trunk分支的本地副本中有二进制文件,因为那是我最初安装/下载包的地方。 然而,在新的发布分支中,

包文件夹和. nuupkg文件都在那里——所以NuGet不认为有任何东西要恢复; 但与此同时,没有一个dll存在——即第三方引用缺失——所以我无法构建。

我删除了$(SolutionDir)/packages中的所有包文件夹(在发布分支下),然后运行完整的重新构建,这一次构建成功了。 ... 当然,然后我回到源代码控制中删除了包文件夹(在主干和发布分支中)。我还不清楚(目前)存储库是否。配置文件也应该被删除。

项目模板为您安装的许多组件(至少对于web项目而言)都是NuGet包。也就是说,这个问题并不局限于您添加的包。 因此,在创建项目/解决方案后立即启用包恢复,在执行初始签入之前,清除packages文件夹(并确保将.nuget文件夹提交给源代码控制)。

免责声明:我在SO上看到了另一个答案,它表明清除packages文件夹是解决方案的一部分。这让我找到了正确的方向,所以我想给作者点赞,但我再也找不到那个问题/答案了。如果我偶然发现了,我会把它编辑一下。

我还要注意Update-Package -重装会修改.sln和.csproj/。vbproj文件。至少对我来说是这样的。恕我直言,这使得这个选择不那么有吸引力。