failed - 如何讓NuGet安裝/更新packages.config中的所有軟件包?




nuget package restore failed (10)

我有一個包含多個項目的解決方案。 大多數第三方引用都缺失,但每個項目都有packages.config文件。 我如何讓NuGet安裝/更新所需的所有軟件包? 這是否需要通過命令行完成每個項目?



在VS2012 V11中,如果我在該行末尾使用“-Reinstall”,則不起作用。

所以我簡單地使用了:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

如果您安裝了Nuget 2.8,請選中該複選框

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

在Visual Studio中。 如果它被選中,那麼只需重建項目就可以恢復所有的參考庫。


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

您可以使用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命令中使用-reinstall參數。

Update-Package -reinstall

您也可以將其限制為一個項目。

Update-Package -reinstall -Project YourProjectName

-reinstall選項將首先卸載,然後再將軟件包安裝回項目中。

或者,您可以使用“ Manage Packages對話框更新包。

更新:

  • 2013/07/10 - 更新了有關NuGet 2.7中nuget恢復的信息
  • 2014/07/06 - 更新了有關Visual Studio中的自動包還原的信息,並將其與NuGet的其他更改進行了更新。
  • 2014/11/21 - 更新了關於-reinstall信息

我使用的是visual studio 2015,上面給出的解決方案對我不起作用,所以我做了以下操作:

從我的解決方案中刪除packages文件夾,並從解決方案中的每個項目中刪除bin和obj文件夾,並為其重建。

也許你會有下一個錯誤:

無法找到nuget.exe

要解決這個問題:在NuGet.targets文件中改變這一行並將其設置為true:

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

參考: https://.com/a/30918648 : https://.com/a/30918648和https://.com/a/20502049


我知道這是一個舊帖子,但認為這可能有用。 如果您需要在更新過程中忽略特定軟件包(如更新JavaScript引用的任何軟件包),請使用以下PowerShell腳本(確保軟件包源代碼在軟件包管理器控制台中設置為“全部”):

編輯2014-09-25 10:55 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) }

現在,Visual Studio 2012中的Nuget Package Manager控制台會立即為您提供“恢復”按鈕,只要它找到任何未安裝的軟件包,但是它位於package.config中。 真棒特徵!


還有另一種更新,更快捷的方法可以在Visual Studio中執行此操作。 請查看David Ebbo的這篇文章 ,如果遇到麻煩,請參閱評論部分。 基本上,你在包管理器提示符下執行以下操作:

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

之後,當您構建解決方案時,軟件包將在缺失時自動安裝。

更新:

該功能通過Visual Studio集成到Nuget 1.6中 ,因此您甚至不需要安裝NuGetPowerTools或輸入命令。 你所要做的就是

右鍵單擊解決方案資源管理器中的解決方案節點,然後選擇啟用NuGet包恢復。

閱讀這篇文章了解更多細節。


重新安裝當前解決方案的所有項目中的所有軟件包:

Update-Package -Reinstall

重新安裝當前解決方案的SPECIFIC PROJECT中的所有軟件包( 感謝unarity和ashes999 ):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall