我有一个包含多个项目的解决方案。大多数第三方引用都缺失了,但是有一些包。每个项目的配置文件。我如何得到NuGet安装/更新所有需要的包?这需要通过命令行为每个项目完成吗?
当前回答
你可以使用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 -更新有关-重新安装的信息
其他回答
在最新的NuGet 2.5版本中,包管理器中现在有一个“更新全部”按钮:http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once
我使用visual studio 2015,上面给出的解决方案不适合我,所以我做了以下工作:
从我的解决方案中删除packages文件夹,也从解决方案中的每个项目中删除bin和obj文件夹,并重新构建。
也许你会遇到下一个错误:
无法找到nuget.exe
要解决这个问题:在你的NuGet中改变这一行。并将其设置为true:
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
参考:https://stackoverflow.com/a/30918648和https://stackoverflow.com/a/20502049
我认为您需要做的第一件事是启用包恢复特性。也可以在这里看到。这是在解决方案(而不是项目)级别上完成的。
但这并不能解决所有问题——在启用恢复功能后,我遇到了类似的问题。(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文件。至少对我来说是这样的。恕我直言,这使得这个选择不那么有吸引力。
现在Nuget包管理器控制台在Visual Studio 2012给你一个“恢复”按钮,一旦它发现任何包没有安装,但在Package .config。 很棒的功能!
这里有另一个解决方案,如果你正在使用网站项目,或不想启用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) }