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


当前回答

我使用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

其他回答

在Visual Studio 2017中-当你使用IDE编译时-它会下载所有缺少的nuget包并保存在文件夹“packages”中。

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

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

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

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

在Visual Studio。如果选中该选项,则只需重新构建项目即可恢复所有参考库。

经过3个小时的搜寻和调查。

我有问题,因为我们在团队中有两个成员(使用GitHub源代码控制),因为我们没有限制文件的包发送到远程存储库,团队成员之一是发送包到服务器,我已经拉到我的本地更改。

在那之后,我有同样的问题,作为PO,我也不能发布我的API项目到服务器。

我刚刚用过的

更新-包-重新安装-在包管理控制台运行此命令

此命令将重新安装解决方案中使用的所有包。(适用于每个项目)

重新安装当前解决方案all PROJECTS中的所有包:

Update-Package - projectname ' project name ' -重新安装-在Package Manager控制台运行此命令

该命令将重新安装与“-ProjectName”后指定的项目相关的所有包。我认为这是更好的,因为我不得不等待半个小时重新安装所有的包在解决方案。

多亏了罗道夫·布洛克。

另外,我建议当你从远程服务器上拉更改时,按下“恢复包”按钮,Visual studio会显示这个按钮。

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

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

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

编辑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) }