我有一个包含多个项目的解决方案。大多数第三方引用都缺失了,但是有一些包。每个项目的配置文件。我如何得到NuGet安装/更新所有需要的包?这需要通过命令行为每个项目完成吗?
当前回答
我尝试了Update-Package -重新安装,但它在一个包上失败,并停止处理解决方案中所有剩余的项目包。
我最终创建了枚举所有包的脚本。对每个项目/包执行Update-Package -重新安装-ProjectName prj -Id pkg。
希望对大家有所帮助:
$files = Get-ChildItem -Recurse -Include packages.config;
[array]$projectPackages = @();
$files | foreach { [xml]$packageFile = gc $_; $projectName = $_.Directory.Name; $packageFile.packages.package.id | foreach { $projectPackages += @( ,@( $projectName, $_ ) ) } }
$projectPackages | foreach { Update-Package -Reinstall -ProjectName $_[0] -Id $_[1] }
编辑: 这是我犯的一个错误: Update-Package:无法找到'EntityFramework.BulkInsert-ef6'包。在执行安装或更新之前,必须还原现有包。 手动运行 更新-包-重新安装-ProjectName my_prj -Id EntityFramework。BulkInsert-ef6 工作得很好。
其他回答
如果您安装了Nuget 2.8,请选中复选框
Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build
在Visual Studio。如果选中该选项,则只需重新构建项目即可恢复所有参考库。
你可以使用NuGet .exe来恢复你的包,或者安装了NuGet 2.7或以上版本,你可以简单地在Visual Studio中编译你的解决方案,这也会恢复丢失的包。
对于NuGet.exe,您可以为每个项目运行以下命令。
nuget install packages.config
或者使用NuGet 2.7,您可以使用命令行恢复解决方案中的所有包。
nuget restore YourSolution.sln
这两种情况都会把包裹拉下来。但是,当运行此命令时,您的项目文件将不会被修改,因此项目应该已经有了对NuGet包的引用。如果不是这样,那么您可以使用Visual Studio来安装这些包。
使用NuGet 2.7及以上版本,Visual Studio将在构建解决方案时自动恢复丢失的NuGet包,因此不需要使用NuGet.exe。
要更新解决方案中的所有包,首先恢复它们,然后您可以使用NuGet.exe更新包,或者从Visual Studio中从包管理器控制台窗口更新包,最后您可以使用管理包对话框。
从命令行,您可以将解决方案中的包更新到nuget.org提供的最新版本。
nuget update YourSolution.sln
注意,这不会在任何NuGet包中运行任何PowerShell脚本。
在Visual Studio中,您可以使用包管理器控制台来更新包。这样做的好处是,任何PowerShell脚本都将作为更新的一部分运行,而使用NuGet.exe将不会运行它们。下面的命令将每个项目中的所有包更新到nuget.org提供的最新版本。
Update-Package
您还可以将此限制为一个项目。
Update-Package -Project YourProjectName
如果您希望将软件包重新安装到与之前安装的版本相同的版本,则可以使用-重装参数和Update-Package命令。
Update-Package -reinstall
您还可以将此限制为一个项目。
Update-Package -reinstall -Project YourProjectName
-重装选项将首先卸载包,然后将其重新安装到项目中。
或者,您可以使用管理包对话框更新包。
更新:
2013/07/10更新有关nuget恢复在nuget 2.7的信息 2014/07/06 -更新了关于Visual Studio中自动包恢复的信息,并将答案与NuGet的其他更改一起更新。 2014/11/21 -更新有关-重新安装的信息
经过3个小时的搜寻和调查。
我有问题,因为我们在团队中有两个成员(使用GitHub源代码控制),因为我们没有限制文件的包发送到远程存储库,团队成员之一是发送包到服务器,我已经拉到我的本地更改。
在那之后,我有同样的问题,作为PO,我也不能发布我的API项目到服务器。
我刚刚用过的
更新-包-重新安装-在包管理控制台运行此命令
此命令将重新安装解决方案中使用的所有包。(适用于每个项目)
重新安装当前解决方案all PROJECTS中的所有包:
Update-Package - projectname ' project name ' -重新安装-在Package Manager控制台运行此命令
该命令将重新安装与“-ProjectName”后指定的项目相关的所有包。我认为这是更好的,因为我不得不等待半个小时重新安装所有的包在解决方案。
多亏了罗道夫·布洛克。
另外,我建议当你从远程服务器上拉更改时,按下“恢复包”按钮,Visual studio会显示这个按钮。
在Visual Studio中还有另一种更新且更快的方法来实现这一点。看看David Ebbo的这篇文章,如果你遇到麻烦,请参考评论部分。基本上,在包管理器提示符中执行以下操作:
PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore
之后,当您构建解决方案时,如果缺少这些包,将自动安装。
更新:
这个功能是内置在Nuget 1.6的visual studio集成,所以你甚至不需要安装NuGetPowerTools或键入命令。你所要做的就是
在“解决方案资源管理器”中右键单击“解决方案”节点并选择 启用NuGet包恢复。
阅读这篇文章了解更多细节。
不知道从什么时候开始,但在VS2019中你可以用一种更简单的方式来做:
在解决方案资源管理器中右键单击解决方案 为解决方案选择管理Nuget包 有4个选项卡,浏览,安装,更新,合并 合并显示是否有任何项目使用不同版本的包(在大多数情况下,这就是为什么我们要更新所有的包) “更新”显示任何项目中是否有可用的更新。选择全部并单击更新,任务将完成。