我有一个包含多个项目的解决方案.大多数第三方引用都丢失了,但packages.config每个项目都有文件. 如何让NuGet安装/更新所需的所有软件包?这是否需要通过命令行为每个项目完成?
Mat*_*ard 844
您可以使用nuget.exe来恢复您的软件包,或者使用NuGet 2.7或更高版本安装,您只需在Visual Studio中编译您的解决方案,这也将恢复丢失的软件包.
对于NuGet.exe,您可以为每个项目运行以下命令.
nuget install packages.config
Run Code Online (Sandbox Code Playgroud)
或者使用NuGet 2.7,您可以使用命令行恢复解决方案中的所有软件包.
nuget restore YourSolution.sln
Run Code Online (Sandbox Code Playgroud)
这两个都将拉下包裹.但是,在运行此命令时,不会修改项目文件,因此项目应该已经具有对NuGet包的引用.如果不是这种情况,则可以使用Visual Studio安装软件包.
使用NuGet 2.7及更高版本,Visual Studio将在您构建解决方案时自动恢复丢失的NuGet包,因此无需使用NuGet.exe.
要更新解决方案中的所有软件包,请先恢复它们,然后您可以使用NuGet.exe更新软件包,也可以在Visual Studio中从Package Manager控制台窗口更新软件包,或者最后可以使用Manage包对话框.
从命令行,您可以将解决方案中的软件包更新为nuget.org提供的最新版本.
nuget update YourSolution.sln
Run Code Online (Sandbox Code Playgroud)
请注意,这不会在任何NuGet包中运行任何PowerShell脚本.
在Visual Studio中,您可以使用程序包管理器控制台来更新程序包.这样做的好处是,任何PowerShell脚本都将作为更新的一部分运行,因为使用NuGet.exe将无法运行它们.以下命令将每个项目中的所有包更新为nuget.org提供的最新版本.
Update-Package
Run Code Online (Sandbox Code Playgroud)
您也可以将其限制为一个项目.
Update-Package -Project YourProjectName
Run Code Online (Sandbox Code Playgroud)
如果要将软件包重新安装到与先前安装的版本相同的版本,则可以使用-reinstall带Update-Package命令的参数.
Update-Package -reinstall
Run Code Online (Sandbox Code Playgroud)
您也可以将其限制为一个项目.
Update-Package -reinstall -Project YourProjectName
Run Code Online (Sandbox Code Playgroud)
该-reinstall选项将首先卸载,然后再将软件包重新安装到项目中.
或者,您可以使用Manage Packages对话框更新包.
更新:
-reinstallRod*_*ock 511
重新安装当前解决方案的所有项目中的所有包:
Update-Package -Reinstall
Run Code Online (Sandbox Code Playgroud)
重新安装当前解决方案的SPECIFIC PROJECT中的所有软件包(感谢unarity和 ashes999):
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 167
在Visual Studio中,还有另一种更新,更快捷的方法.查看 David Ebbo的这篇文章,如果遇到麻烦,请参考评论部分.基本上,您在包管理器提示符中执行以下操作:
PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore
Run Code Online (Sandbox Code Playgroud)
之后,当您构建解决方案时,如果丢失包,将自动安装包.
更新:
此功能内置于Nuget 1.6中,具有visual studio集成功能,因此您甚至无需安装NuGetPowerTools或键入命令.你所要做的就是
右键单击Solution Explorer中的Solution节点,然后选择Enable NuGet Package Restore.
阅读本文了解更多详情.
Dav*_*tin 20
如果您正在使用网站项目,或者不想启用NuGet包还原,这是另一种解决方案.
您可以使用程序包管理器控制台枚举package.config文件中的所有程序包并重新安装它们.
# 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) }
Run Code Online (Sandbox Code Playgroud)
una*_*ity 15
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
Run Code Online (Sandbox Code Playgroud)
这是我发现的最好,最简单的例子.它将重新安装packages.config中列出的所有nugets,它将保留当前版本.替换YourProjectNameGoesHere为项目名称.
Eri*_*oom 10
使用最新的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.targets文件中更改此行并将其设置为true:
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
Run Code Online (Sandbox Code Playgroud)
参考:https://stackoverflow.com/a/30918648和/sf/answers/1435143461/
我相信您需要做的第一件事就是启用包恢复功能。另请参阅此处。这是在解决方案(而不是项目)级别完成的。
但这并不能让你一切顺利——我在启用恢复功能后遇到了类似的问题。(VS2013、NuGet 2.8。)
事实证明,当我提交项目时,我(无意中)将包提交给了源代码管理 -但Visual Studio(和源代码管理插件)在执行签入时忽略了二进制文件。
当我创建发布分支时出现了问题。我的 dev/main/trunk 分支的本地副本包含二进制文件,因为那是我最初安装/下载软件包的地方。
然而,在新的发布分支中,
.nupkg文件都在那里——所以 NuGet 认为没有任何东西可以恢复;我删除了(在发布分支下)中的所有包文件夹$(SolutionDir)/packages,然后运行了完整重建,这次构建成功了。
...然后当然我回去并从源代码管理中删除了包文件夹(在主干和发布分支中)。我还不清楚该repositories.config文件是否也应该被删除。
项目模板为您安装的许多组件(至少对于 Web 项目而言)都是 NuGet 包。也就是说,这个问题不仅限于您添加的包。
因此,在创建项目/解决方案后立即启用包还原,并在执行初始签入之前,清除文件夹packages(并确保将.nuget文件夹提交到源代码管理)。
免责声明:我在这里看到了另一个答案,它表明清除packages文件夹是解决方案的一部分。这让我走上了正轨,所以我想感谢作者,但我再也找不到那个问题/答案了。如果我偶然发现它,我会发布编辑。
我还要注意,这Update-Package -reinstall将修改.sln和 .csproj/.vbproj文件。至少在我的例子中它就是这样做的。恕我直言,这使得这个选项的吸引力大大降低。
如果您安装 Nuget 2.8,请选中复选框
Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build
Run Code Online (Sandbox Code Playgroud)
在 Visual Studio 中。如果选中,则只需重建项目即可恢复所有参考库。
对于由于构建服务器出现问题而到达此处的用户,您可以创建一个运行 exec 命令的 MSBuild 目标来运行nuget 恢复命令,如下所示(在本例中 nuget.exe 位于 .nuget 文件夹中,而不是路径),然后可以在构建解决方案之前立即在 TeamCity 构建步骤中运行
<Target Name="BeforeBuild">
<Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
经过3个小时的搜索和调查。
我遇到了问题,因为我们团队中有两名成员(使用 GitHub 源代码管理),因为我们没有限制发送到远程存储库的包的文件,其中一名团队成员将包发送到服务器,我已将这些更改拉到我的本地
在那之后,我遇到了与 PO 相同的问题,也无法将我的 API 项目发布到服务器。
我刚刚用过
Update-Package -Reinstall - 在包管理器控制台上运行此命令
此命令将重新安装您在解决方案中使用的所有软件包。(对于每个项目)
重新安装当前解决方案的所有项目中的所有包:
Update-Package -ProjectName 'NameOfProject' -Reinstall - 在包管理器控制台上运行此命令
此命令将重新安装与您在“-ProjectName”之后指定的项目相关的所有包。我认为这更好,因为我等了半个小时才重新安装解决方案中的所有软件包。
为此,非常感谢Rodolpho Brock。
另外,我建议您在从远程服务器拉取更改时,按下 Visual Studio 将显示的“恢复包”按钮。
| 归档时间: |
|
| 查看次数: |
515984 次 |
| 最近记录: |