NuGetでpackages.config内のすべてのパッケージをインストール/更新するにはどうすればよいですか?


673

複数のプロジェクトを含むソリューションがあります。サードパーティの参照のほとんどが欠落していpackages.configますが、プロジェクトごとにファイルがあります。 NuGetで必要なすべてのパッケージをインストール/更新するにはどうすればよいですか?これは、プロジェクトごとにコマンドラインで行う必要がありますか?


10
NuGetがVisual Studioに統合され、この問題を解決する簡単な方法があるので、受け入れられた回答の変更を検討してください。
スコリマ

2
最新のNuGet 2.5リリースでは、パッケージマネージャーに[すべて更新]ボタンがあります。docs.nuget.org
notes

@ErikSchierboomありがとう!このスレッドが利用可能になったため、このスレッドを更新する必要があります
Karl Cassar

関連プロジェクト:chocolatey.org
Jayan 2014年

1
サーチャーの利益のために、VS2013では、ソリューションを右クリックして、「NuGetパッケージの復元を有効にする」を選択できます。次にビルドします。
HockeyJ 2014

回答:


870

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内から、パッケージマネージャーコンソールを使用してパッケージを更新することもできます。これには、NuGet.exeを使用しても実行されないのと同様に、PowerShellスクリプトが更新の一部として実行されるという利点があります。次のコマンドは、すべてのプロジェクトのすべてのパッケージを、nuget.orgから入手可能な最新バージョンに更新します。

Update-Package

これを1つのプロジェクトに制限することもできます。

Update-Package -Project YourProjectName

以前にインストールしたのと同じバージョンにパッケージを再インストールする場合は、-reinstall引数付きのUpdate-Packageコマンドを使用できます。

Update-Package -reinstall

これを1つのプロジェクトに制限することもできます。

Update-Package -reinstall -Project YourProjectName

この-reinstallオプションでは、最初にアンインストールしてから、パッケージをプロジェクトに再度インストールします。

または、Manage Packagesダイアログを使用してパッケージを更新できます。

アップデート:

  • 2013年7月10日 -についての情報を更新しましたnuget NuGet 2.7に復元
  • 2014/07/06 -Visual Studioでの自動パッケージ復元に関する情報で更新され、NuGetへの他の変更により回答が最新になりました。
  • 2014/11/21-に関する情報で更新-reinstall

15
これを行うためのVisual Studio内の簡単なコマンドはありますか?ソリューションで自動復元を有効にしていますが、参照が不足しているため、「ビルド」でも多くのエラーが発生します(パッケージはpackages.configから復元されていません)。
Borek Bernard

1
NuGet Power Tools-github.com/davidfowl/NuGetPowerToolsのようなものをインストールしないと、私はそうは思いません。ただし、これは基本的には、既に持っている自動復元と同じことです。
Matt Ward

2
これは、パッケージを「復元」するだけでなく、パッケージのインストールにも一般的に機能します(ISをインストールすると、技術的に大きな違いはありません。ただし、ソリューションパッケージの復元機能を使用するユーザーに限定されません)。ただし、このためには、環境変数EnableNuGetPackageRestoreを設定する必要があります。$ nu:EnableNuGetPackageRestore = "true"のように、 "nuget install packages.config"を呼び出す前に、psakeスクリプトに設定しました。これにより、マシン全体の変数(およびおそらく他のビルド)に影響を与えることなく、PSプロセスとそれが生成するプロセスの変数が設定されます。
galaktor 2013年

復元はインストールとまったく同じではありません。コマンドラインからパッケージをインストールしてもプロジェクトは変更されないため、アセンブリ参照などは追加されません。
Matt Ward

3
少なくとも1時間は解決策を探すために費やしたに違いありませんが、最終的には確かに解決しましたUpdate-Package -reinstall -Project ProjectName
Wiz

528

現在のソリューションのすべてのプロジェクトのすべてのパッケージを再インストールします。

Update-Package -Reinstall

現在のソリューションのSPECIFIC PROJECTにすべてのパッケージを再インストールします(unarityashes999のおかげで):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

60
これは本当にOPが求めていたもので、他のすべてのソリューションよりもはるかに簡単だと思います...
jaminto 2013年

4
今すぐ機能させるのに必要なだけの場合、これは核オプションです。
クリス

11
これは、ターゲットフレームワークなどを変更した直後の場合にも最適なオプションです。私は、25の奇妙なプロジェクトを更新しなければならないという予想に直面していました。それらの周りに多数のnugetパッケージが分散していて、最初のコマンドは私が望むものにぴったりでした。そして、やりすぎの意味でも核兵器ではありません。
Chris

7
これがこの質問への答えであるはずです。受け入れられた答えは機能しますが、これは具体的に質問に答えます。まさに必要なものであるための+1。
クリスタン、2014

10
-IgnoreDependenciesスイッチを追加することもできます。私は、アップデート・パッケージを失敗持っていたので、私は私のpackages.configに指定されたよりも新しいバージョンに存在していた使用されたパッケージの1の依存性
マティアス・ファルケンベルク

167

Visual Studio内からこれを行うための、より新しく、より迅速な方法がもう1つあります。David Ebboによるこの投稿をチェックし 問題が発生した場合はコメントセクションを参照してください。基本的に、パッケージマネージャーのプロンプトで次の操作を行います。

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

その後、ソリューションをビルドすると、パッケージがない場合は自動的にインストールされます。

更新:

この機能はビジュアルスタジオの統合によりNuget 1.6に組み込まれているため、NuGetPowerToolsをインストールしたりコマンドを入力したりする必要もありません。あなたがしなければならないすべては

ソリューションエクスプローラーでソリューションノードを右クリックし、[NuGetパッケージの復元を有効にする]を選択します。

詳細については、この記事をお読みください。


6
ここで更新された回答は、nuget.exeがないため(ただし、Visual Studioにnugetがインストールされているため)、ほとんどの人にとって最良の解決策になります。
Tod Thomson、

1
しかし、パッケージの復元は実際にnuget.exeをダウンロードします
Konstantin

4
私はこれをやった。参照が欠落していると言ってビルドは失敗します。ビルドで、すべてのパッケージが既にインストールされていると表示されます。solution/ packagesフォルダーに移動して、問題のパッケージを削除すると、パッケージがダウンロードされて動作し始めました。
マズロー

3
@Shyこの方法は、プロジェクトファイルのすべてを変更しないソリューションのために廃止されました。
マフィンマン

20

Webサイトプロジェクトを使用している場合、または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) }

4
上記の答えをそれぞれ試しましたが、私の解決策の1つでそれらを動作させることができませんでした。しかし、これのバリエーションはそうしました。 $packages.packages.package | % { Update-Package -reinstall -id $($_.id) }
PerryJ 2013

1
同じcsprojで複数のソリューションを使用する場合、nugetパッケージの復元は悪夢です...私はこの答えに拍手を送ります!
felickz 2013

1
これで問題は解決しませんでしたが、気分が良くなりました!
Devil's Advocate 2013

これは優れており、パッケージを新しいプロジェクトに移行する方法を提供します。[xml] $ packages = gc c:\ PathToExisting \ packages.config #followed by#各パッケージをインストール %{Install-Package -id $($ _。id)-Version $($
_。version

1
@PerryJあなたはタイプしUpdate-Package -Reinstallただけかもしれません。
BrainSlugs83 2017年

15
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

これは私が見つけた最良かつ最も簡単な例です。packages.configにリストされているすべてのnugetsを再インストールし、現在のバージョンを保持します。をYourProjectNameGoesHereプロジェクト名に置き換えます。


私のpackages.configには特定のバージョンの2つのパッケージへの参照が含まれていましたが、1つのパッケージが特定のバージョンのない他のパッケージに依存していたため、これで問題が発生しました。更新を実行すると、最初にすべてのパッケージがアンインストールされ、その後、新しいバージョンの依存関係が「参照済み」であったため、再インストールが失敗しました。削除はうまくいきましたが、私のpackages.configは空になりました。完全な更新を試みる前に、packages.configをソース管理から戻し、競合するパッケージを更新する必要がありました...
Mathias Falkenberg

10

最新のNuGet 2.5リリースでは、パッケージマネージャーに[すべて更新]ボタンがあります。http//docs.nuget.org/docs/release-notes/nuget-2.5#​​Update_All_button_to_allow_updating_all_packages_at_once


2
また、パッケージマネージャーコンソールから "Update-Package"を実行して、プロジェクト内のすべてのパッケージを実行できます:nuget.codeplex.com/wikipage?title
kmp

6

私はビジュアルスタジオ2015を使用していますが、上記の解決策ではうまくいかなかったため、次のようにしました。

ソリューションからpackagesフォルダーを削除し、ソリューション内のすべてのプロジェクトからbinおよびobjフォルダーも削除して、再ビルドします。

多分あなたは次のエラーを持つでしょう:

nuget.exeが見つかりません

これを解決するには:NuGet.targetsファイルのこの行を変更し、trueに設定します。

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

リファレンス:https : //stackoverflow.com/a/30918648およびhttps://stackoverflow.com/a/20502049


4

Nuget 2.8をインストールする場合は、チェックボックスをオンにします

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

Visual Studioで。チェックされている場合、プロジェクトを再ビルドするだけですべての参照ライブラリが復元されます。


Visual StudioのUIからの最も便利なオプション。また、Allow NuGet to download missing packagesチェックボックスもオンにする必要があります。
RBT 2017

4

3時間の検索と調査の後。

チームに2人のメンバーがいるため(GitHubソース管理を使用)、リモートリポジトリに送信するパッケージのファイルを制限していないため、チームメンバーの1人がパッケージをサーバーに送信していて、その変更を私の地元。

その後、POと同じ問題が発生しましたが、APIプロジェクトをサーバーに公開できませんでした。

で、私はちょうど使用しました

Update-Package -Reinstall-パッケージマネージャーコンソールでこのコマンドを実行します

このコマンドは、ソリューションで使用したすべてのパッケージを再インストールします。(すべてのプロジェクトに対して)

現在のソリューションのすべてのプロジェクトのすべてのパッケージを再インストールします。

Update-Package -ProjectName 'NameOfProject' -Reinstall-パッケージマネージャーコンソールでこのコマンドを実行します

このコマンドは、「-ProjectName」の後に指定したプロジェクトに関連するすべてのパッケージを再インストールします。そして、ソリューションにすべてのパッケージを再インストールするのに30分待っていたので、これはより良いと思います。

Rodolpho Brockに感謝します。

また、リモートサーバーから変更をプルするときに、Visual Studioによって表示される[パッケージの復元]ボタンを押すことをお勧めします。


3

私はあなたがする必要がある最初のことはパッケージの復元機能を有効にすることだと思います。こちらもご覧ください。これはソリューション(プロジェクトではない)レベルで行われます。

しかし、それだけでは十分ではありません。復元機能を有効にした後、同様の問題に遭遇しました。(VS2013、NuGet 2.8)。

プロジェクトをコミットしたときに、パッケージをソース管理に(意図せずに)コミットしたことがわかりましたが、 Visual Studio(およびソース管理プラグイン)は、チェックインの実行時にバイナリを無視していたためです。

この問題は、リリースブランチを作成したときに発生しました。dev / main / trunkブランチのローカルコピーにはバイナリが含まれていました。これは、パッケージを最初にインストール/ダウンロードした場所だからです。
ただし、新しいリリースブランチでは、

  • パッケージのフォルダーと.nupkgファイルはすべて揃っていたので、NuGetは復元するものがあるとは考えていませんでした。
  • しかし同時に、DLLは存在せず、つまりサードパーティの参照が欠落していたため、ビルドできませんでした。

$(SolutionDir)/packages(releaseブランチの下の)にあるすべてのパッケージフォルダーを削除してから、完全な再ビルドを実行しましたが、今回はビルドが成功しました。
...そしてもちろん、戻ってパッケージ管理フォルダーを(トランクおよびリリースブランチの)ソース管理から削除しました。repositories.configファイルも削除する必要があるかどうかは(まだ)わかりません。

プロジェクトテンプレートによってインストールされたコンポーネントの多く(少なくともWebプロジェクトの場合)は、NuGetパッケージです。つまり、この問題は、追加したパッケージに限定されません。
したがって、プロジェクト/ソリューションの作成後すぐにパッケージの復元を有効にし、最初のチェックインを実行する前に、packagesフォルダーをクリアします(.nugetフォルダーをソース管理にコミットしていることを確認してください)。

免責事項:私はここでSOで別の回答を見ました。これは、packagesフォルダーのクリアが解決の一部であることを示しています。それで正しい方向に進んだので、著者にクレジットを与えたいのですが、その質問/回答を見つけることができなくなりました。偶然見つけた場合は、編集内容を投稿します。

また、 / ファイルUpdate-Package -reinstallが変更されることにも注意してください。少なくともそれは私の場合にやったことです。どのIMHOがこのオプションの魅力を大幅に減らします。.sln.csproj.vbproj


私はこれとまったく同じ問題を抱えていて、ローカルパッケージを削除するだけでよいと言ったときに、パッケージのアップグレードと再インストールに長い時間を費やしました。
Thomas Boby

3

私は試しました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] }

編集: これは私が経験したエラーです: Update-Package:パッケージ 'EntityFramework.BulkInsert-ef6'が見つかりません。インストールまたは更新を実行する前に、既存のパッケージを復元する必要があります。 の手動実行は Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 非常にうまくいきました。


2
ありがとうございました。私は喜びで泣いています
cleftheris

私も喜びで泣いています!はい!!なんと時間を節約できますか。参考までに、セルゲイのスクリプトの最後の行の代わりにこの行を使用すると、依存関係はインストールされません。単純な再インストール:$ projectPackages | foreach {Update-Package -IgnoreDependencies -Reinstall -ProjectName $ _ [0] -Id $ _ [1]}
ElMatador

2

ビルドサーバーがこれに陥ったためにここに到着した場合は、execコマンドを実行するMSBuildターゲットを作成して、以下のようにnuget restoreコマンドを実行できます(この場合、nuget.exeは.nugetフォルダー内ではなく、パス)。ソリューションをビルドする直前にTeamCityビルドステップで実行できます。

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

1

Visual Studio 2012のNugetパッケージマネージャーコンソールでは、インストールされていないがpackage.configにあるパッケージが見つかると、自動的に[復元]ボタンが表示されます。素晴らしい機能!


2
これはVisual Studio 2010にも
当てはまり

1

VS2012 V11では、行の最後で「-Reinstall」を使用すると機能しません。

だから私は単に使用しました:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

1

私はこれが古い投稿であることを知っていますが、これは役に立つかもしれないと思いました。更新プロセス中に特定のパッケージを無視する必要がある場合(JavaScript参照を更新するパッケージなど)、次のPowerShellスクリプトを使用します(パッケージマネージャーコンソールでパッケージソースが「すべて」に設定されていることを確認してください)。

編集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) }

0

Visual Studio 2017の場合-IDEを使用してコンパイルすると、不足しているすべてのnugetパッケージがダウンロードされ、「packages」フォルダーに保存されます。

しかし、ビルドマシンでは、コンパイルはmsbuild.exeを使用して行われました。その場合、nuget.exeをダウンロードしました。

msbuild.exeを実行する前の各ビルドプロセス中。それは実行されます-> nuget.exe NAME_OF_SLN_Fileを復元します(.SLNファイルが1つしかない場合は、そのパラメーターを無視できます)。


これを行うには、コマンドラインでSLNのMSBuild -t:restoreを使用できることがわかりました。 MSbuild -t:restore Xxxx.sln
マイクケリー

0

いつからかわからないが、VS2019ではそれを簡単に行うことができる:

  1. ソリューションエクスプローラーでソリューションを右クリック
  2. ソリューションのNugetパッケージの管理を選択します
  3. 4つのタブ、[参照]、[インストール済み]、[更新]、[統合]があります
  4. Consolidateは、異なるバージョンのパッケージを使用しているプロジェクトがあるかどうかを示します(ほとんどの場合、それがすべてのパッケージを更新する理由です)。
  5. 更新は、どのプロジェクトでも利用可能な更新があるかどうかを示します。すべてを選択して更新をクリックすると、ジョブが完了します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.