我有一个包含多个项目的解决方案。 大多数第三方引用都丢失了,但是每个项目都有packages.config文件。 如何获得NuGet来安装/更新所有需要的软件包? 每个项目都需要通过命令行完成吗?


#1楼

如果您正在使用网站项目,或者不想启用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) }

#2楼

在最新的NuGet 2.5版本中,软件包管理器中现在提供了“全部更新”按钮: http : //docs.nuget.org/docs/release-notes/nuget-2.5#​​Update_All_button_to_allow_updating_all_packages_at_once


#3楼

在当前解决方案的“所有项目”中重新安装所有软件包:

Update-Package -Reinstall

在当前解决方案的SPECIFIC PROJECT中重新安装所有软件包( 由于unarity和ashes999 ):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

#4楼

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

这是我发现的最好,最简单的示例。 它将重新安装packages.config中列出的所有nuget,并将保留当前版本。 用项目名称替换YourProjectNameGoesHere


#5楼

现在,Visual Studio 2012中的Nuget软件包管理器控制台会在您在package.config中找到未安装但位于其中的任何软件包时自动为您提供“还原”按钮。 很棒的功能!


#6楼

我相信您需要做的第一件事就是启用软件包还原功能 。 另请参阅此处 。 这是在解决方案(而非项目)级别完成的。

但这并不能完全解决问题-启用还原功能后,我遇到了类似的问题。 (VS2013,NuGet 2.8。)

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

创建发行分支时出现了问题。 我在dev / main / trunk分支的本地副本中有二进制文件,因为这是我最初安装/下载软件包的地方。
但是,在新发行版分支中,

  • 软件包文件夹和.nupkg文件都在这里-因此NuGet认为没有任何可恢复的东西;
  • 但同时,没有DLL出现-即缺少第三方引用-因此我无法构建。

我删除了$(SolutionDir)/packages所有package文件夹(在release分支下),然后进行了完全重建,这一次构建成功。
...然后我当然回去了,从源代码管理中删除了程序包文件夹(在主干和发布分支中)。 对于是否应删除repositories.config文件,我目前还不清楚。

项目模板(至少对于Web项目)为您安装的许多组件都是NuGet软件包。 也就是说,此问题不仅限于您添加的软件包。
因此,在创建项目/解决方案后立即启用软件包还原,并且在执行初始签入之前,请清除packages文件夹(并确保将.nuget文件夹提交至源代码管理)。

免责声明:我在SO上看到了另一个答案,它表明清除packages文件夹是解决方案的一部分。 这使我走上了正确的道路,因此我想赞扬作者,但我无法再找到该问题/答案。 如果偶然发现,我将发布编辑内容。

我还要注意, Update-Package -reinstall将修改.sln.csproj / .vbproj文件。 至少这就是我的情况。 哪个恕我直言使该选项的吸引力大大降低。


#7楼

在VS2012 V11上,如果我在行尾使用“ -Reinstall”,则该行不通。

所以我简单地使用:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

#8楼

我知道这是一篇旧文章,但认为这可能很有用。 如果您需要在更新过程中忽略特定的程序包(如更新JavaScript引用的任何程序包),请使用以下PowerShell脚本(确保程序包源在“程序包管理器控制台”中设置为“全部”):

EDIT 2014-09-25 10:55 AM EST-修复了脚本中的错误

$packagePath = "packages.config"
$projectName = "MyProjectName"$packagesToIgnore = @("bootstrap","jQuery","jquery-globalize","jquery.mobile","jQuery.jqGrid","jQuery.UI.Combined","jQuery.Validation","Microsoft.jQuery.Unobtrusive.Validation","Modernizr","Moment.js"
)[xml]$packageFile = gc $packagePath
$packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id}$packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }

#9楼

如果您安装了Nuget 2.8,请选中该复选框

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build

在Visual Studio中。 如果选中,则只需重建项目即可还原所有参考库。


#10楼

我正在使用Visual Studio 2015,上面给出的解决方案对我不起作用,所以我做了以下事情:

从我的解决方案中删除packages文件夹,并从解决方案中的每个项目中删除bin和obj文件夹,然后对其进行重建。

也许您会遇到下一个错误:

无法找到nuget.exe

解决此问题的方法:在NuGet.targets文件中更改此行并将其设置为true:

<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

参考: https : //stackoverflow.com/a/30918648和https://stackoverflow.com/a/20502049


#11楼

对于由于构建服务器受到污染而到达此处的用户,可以创建一个运行exec命令的MSBuild目标,以运行nuget restore命令,如下所示(在这种情况下,nuget.exe在.nuget文件夹中,而不是在路径),然后可以在构建解决方案之前立即在TeamCity构建步骤中运行

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

#12楼

经过3小时的搜索和调查。

我遇到了问题,因为我们团队中有两个成员(使用GitHub源代码控制),因为我们不限制用于发送到远程存储库的软件包的文件,其中一个成员是将软件包发送到服务器,而我将所做的更改拉到我的本地人。

在那之后,我遇到了与PO相同的问题,也无法将我的API项目发布到服务器。

在和我刚用过的

Update-Package-重新安装 -在Package Manager控制台上运行此命令

该命令将重新安装您在解决方案中使用的所有软件包。 (对于每个项目)

在当前解决方案的“所有项目”中重新安装所有软件包:

Update-Package -ProjectName'NameOfProject'-重新安装 -在Package Manager控制台上运行此命令

此命令将重新安装与在“ -ProjectName”之后指定的项目有关的所有软件包。 而且我认为这样会更好,因为我已经等了半个小时才重新安装解决方案中的所有软件包。

感谢Rodolpho Brock 。

另外,我建议您从远程服务器中提取更改时,按Visual Studio将显示的“还原软件包”按钮。


#13楼

在Visual Studio 2017中-当您使用IDE进行编译时-它会下载所有缺少的nuget程序包并将其保存在“程序包”文件夹中。

但是在生成计算机上,编译是使用msbuild.exe完成的。 在这种情况下,我下载了nuget.exe。

在执行msbuild.exe之前的每个生成过程中。 它将执行-> nuget.exe恢复NAME_OF_SLN_File(如果只有一个.SLN文件,则可以忽略该参数)。


#14楼

我尝试了Update-Package -reinstall但它在软件包上失败,并停止处理我的解决方案中所有剩余的项目软件包。

我结束了列举所有package.config文件的脚本,并为每个项目/程序包运行Update-Package -Reinstall -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] }

编辑:这是我有一个错误: 更新包:无法找到包'EntityFramework.BulkInsert-ef6'。 在执行安装或更新之前,必须还原现有软件包。 手动运行Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6效果很好。


#15楼

当我尝试以下解决方案时,我正在写此答案,但没有一个起作用:

  1. 清除缓存
  2. 还原或重新安装软件包
  3. 更改目标框架
  4. 更新Nuget软件包管理器

然后,我查看了一个下拉列表,发现该错误很小。 软件包源离线! 我在系统上安装了VS2017 Professional,并打开了一个现有项目,发现缺少多个软件包。 我尝试了所有可能的方法,没有查看Package Source!


解决方案

步骤01.转到程序包管理器设置 (工具> Nuget程序包管理器>程序包管理器设置)

步骤02 。 检查包装来源。 如您所见,包源已经在这里下载了SDK / nugets / packages。 我不知道原因,但是我的Visual Studio系统安装中缺少nuget.org的在线软件包源。

步骤03.安装nuget.org作为软件包源,然后“清除所有Nuget缓存”,然后还原软件包。 错误将消失。

名称:nuget.org(或根据需要)来源: https ://api.nuget.org/v3/index.json


#16楼

您可以使用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

如果要将软件包重新安装到与以前安装的版本相同的版本,则可以将-reinstall参数与Update-Package命令一起使用。

Update-Package -reinstall

您还可以将此限制为一个项目。

Update-Package -reinstall -Project YourProjectName

-reinstall选项将首先卸载,然后将软件包重新安装回项目中。

或者,您可以使用“ Manage Packages对话框来更新Manage Packages

更新:

  • 2013/07/ 10-更新了有关NuGet 2.7中nuget restore的信息
  • 2014/07/06-更新了有关Visual Studio中程序包自动还原的信息,并通过对NuGet的其他更改使答案保持最新。
  • 2014/11 / -reinstall更新了有关-reinstall信息

#17楼

在Visual Studio中,还有另一种更新更快的方法。 查看David Ebbo的这篇文章 ,如果遇到麻烦,请参考评论部分。 基本上,您在程序包管理器提示符下执行以下操作:

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

之后,在构建解决方案时,如果缺少软件包,则将自动安装它们。

更新:

该功能内置于具有Visual Studio集成的Nuget 1.6中 ,因此您甚至无需安装NuGetPowerTools或键入命令。 您要做的就是

右键单击“解决方案资源管理器”中的“解决方案”节点,然后选择“启用NuGet软件包还原”。

阅读本文以获取更多详细信息。

如何获取NuGet以安装/更新packages.config中的所有软件包?相关推荐

  1. zypper 删除mysql_如何在 Linux 上安装/卸载一个文件中列出的软件包?

    原标题:如何在 Linux 上安装/卸载一个文件中列出的软件包? 我们可以手动去安装这些软件但是这将花费大量的时间.你可以手动安装一俩个服务器,但是试想如果你有大概十个服务器呢.在这种情况下你无法手动 ...

  2. 要注意 packages.config 中的targetFramework

    两个项目,同样的配置,结果不一样,经过排查发现 一个ef 的 targetFramework  是 net40 一个是 net45 改为一致后,结果一样.

  3. nuget 包版本冲突解决 packages.config

    开发项目中安装了Newtonsoft.Json组件,遇到了必须给Newtonsoft.Json降版本的问题. 原因是:项目是MVC项目,WebApi模块必须使用framework4.5.0.0的版本. ...

  4. 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference

    在前段时间我写了一篇迁移 csproj 格式的博客 将 WPF.UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj,不过全过程是手工进行的, ...

  5. 获取 Nuget 版本号

    本文告诉大家通过命令行获取 Nuget 的版本号 在 Nuget 中没有 -version 和 -v 和 --version 等写法,只需要直接输入 nuget 在第一行就会显示版本号 nuget N ...

  6. pip安装更新、第三方库对应的python解释器版本、pip安装第三方库,压缩包离线安装,pycharm快捷安装及pycharm中terminal的使用,timeout超时报错

    文章有点长,但是很详细,还望大家耐心看 之前在安装python的文章中已经给大家配置了pip环境变量(不了解的点这里去看看),这里就能直接在cmd窗口,不用切换路径,就能使用pip了. 首先 使用pi ...

  7. Fedora/Redhat 在线安装更新软件包,yum 篇 ── 给新手指南 (转载)

    源地址:http://fedora.linuxsir.org/main/?q=node/31 ==================================================== ...

  8. [VSCode] Ubuntu 16.04 安装/更新 vscode

    方法 1 获取最新版本安装包 wget https://update.code.visualstudio.com/latest/linux-deb-x64/stable -O vscode_lates ...

  9. win10系统打开更新服务器失败怎么回事,Win10系统一直无法安装更新怎么办 Win10更新一直安装失败的3种解决方法...

    经常会有小伙伴反馈,Win10无法安装更新怎么办?其实,Windows 10更新方法有很大,总有一种方式可以解决问题.以下是Win10更新失败的三种解决方式,帮你轻松解决更新失败问题. Win10更新 ...

最新文章

  1. 2019年1月计算机书籍JavaScript新书
  2. 【UIKit】UIView基础学习
  3. 一文弄懂YOLO目标检测算法
  4. oracle交流 提问,Oracle常见提问5(转)
  5. java在SAE中使用的相关问题总结
  6. linux云管理,教程|云帮手部署Linux公有云管理系统
  7. Gym - 101972A Multiplication Dilemma(模拟)
  8. linux操作系统原理_Linux系统从新手到运维老鸟学习指南
  9. 2014 网选 5012 Dice(bfs模板)
  10. Java 算法 寂寞的数
  11. 4安全框_压花玻璃与安全玻璃有哪些特点?玻璃隔断的介绍
  12. 成年人的世界,嘴上喊的都是主义,心里装的都是生意
  13. MediaInfo源代码分析 4:Inform()函数
  14. Ajax案例:简易的购书网页
  15. 基于JavaEye-API实现的Gerry-聊天QQ版v2.0
  16. Python图形用户界面和游戏开发
  17. 辅助驾驶功能开发-功能规范篇(05)-智能限速辅助SLA
  18. 你听过哪些与房东有关的悲催的故事?
  19. MATLAB一元线性回归(最小二乘法)小例子
  20. ruok is not executed because it is not in the whitelist.

热门文章

  1. ORACLE 查看有多个执行计划的SQL语句
  2. 八、IO优化(3)稀疏列
  3. 在CF卡上建立文件系统和安装引导加载程序
  4. CCNA-(5)-IP路由汇总
  5. 【算法】验证哥德巴赫猜想
  6. moosefs-1.6.10 安装手记
  7. 运动:延伸你的美丽(图)
  8. Spring框架整合多数据源 Mysql+oracle
  9. 5.5 用户定义的可调用类型
  10. ORA-00018-超出最大连接数