複数のプロジェクトを含むソリューションがあります。サードパーティの参照のほとんどが欠落していpackages.config
ますが、プロジェクトごとにファイルがあります。 NuGetで必要なすべてのパッケージをインストール/更新するにはどうすればよいですか?これは、プロジェクトごとにコマンドラインで行う必要がありますか?
複数のプロジェクトを含むソリューションがあります。サードパーティの参照のほとんどが欠落していpackages.config
ますが、プロジェクトごとにファイルがあります。 NuGetで必要なすべてのパッケージをインストール/更新するにはどうすればよいですか?これは、プロジェクトごとにコマンドラインで行う必要がありますか?
回答:
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
ダイアログを使用してパッケージを更新できます。
アップデート:
-reinstall
Update-Package -reinstall -Project ProjectName
現在のソリューションのすべてのプロジェクトのすべてのパッケージを再インストールします。
Update-Package -Reinstall
現在のソリューションのSPECIFIC PROJECTにすべてのパッケージを再インストールします(unarityと ashes999のおかげで):
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
Visual Studio内からこれを行うための、より新しく、より迅速な方法がもう1つあります。David Ebboによるこの投稿をチェックし 、問題が発生した場合はコメントセクションを参照してください。基本的に、パッケージマネージャーのプロンプトで次の操作を行います。
PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore
その後、ソリューションをビルドすると、パッケージがない場合は自動的にインストールされます。
更新:
この機能はビジュアルスタジオの統合によりNuget 1.6に組み込まれているため、NuGetPowerToolsをインストールしたりコマンドを入力したりする必要もありません。あなたがしなければならないすべては
ソリューションエクスプローラーでソリューションノードを右クリックし、[NuGetパッケージの復元を有効にする]を選択します。
詳細については、この記事をお読みください。
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) }
$packages.packages.package | % { Update-Package -reinstall -id $($_.id) }
Update-Package -Reinstall
ただけかもしれません。
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
これは私が見つけた最良かつ最も簡単な例です。packages.configにリストされているすべてのnugetsを再インストールし、現在のバージョンを保持します。をYourProjectNameGoesHere
プロジェクト名に置き換えます。
最新のNuGet 2.5リリースでは、パッケージマネージャーに[すべて更新]ボタンがあります。http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once
私はビジュアルスタジオ2015を使用していますが、上記の解決策ではうまくいかなかったため、次のようにしました。
ソリューションからpackagesフォルダーを削除し、ソリューション内のすべてのプロジェクトからbinおよびobjフォルダーも削除して、再ビルドします。
多分あなたは次のエラーを持つでしょう:
nuget.exeが見つかりません
これを解決するには:NuGet.targetsファイルのこの行を変更し、trueに設定します。
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
リファレンス:https : //stackoverflow.com/a/30918648およびhttps://stackoverflow.com/a/20502049
Nuget 2.8をインストールする場合は、チェックボックスをオンにします
Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build
Visual Studioで。チェックされている場合、プロジェクトを再ビルドするだけですべての参照ライブラリが復元されます。
Allow NuGet to download missing packages
チェックボックスもオンにする必要があります。
3時間の検索と調査の後。
チームに2人のメンバーがいるため(GitHubソース管理を使用)、リモートリポジトリに送信するパッケージのファイルを制限していないため、チームメンバーの1人がパッケージをサーバーに送信していて、その変更を私の地元。
その後、POと同じ問題が発生しましたが、APIプロジェクトをサーバーに公開できませんでした。
で、私はちょうど使用しました
Update-Package -Reinstall-パッケージマネージャーコンソールでこのコマンドを実行します
このコマンドは、ソリューションで使用したすべてのパッケージを再インストールします。(すべてのプロジェクトに対して)
現在のソリューションのすべてのプロジェクトのすべてのパッケージを再インストールします。
Update-Package -ProjectName 'NameOfProject' -Reinstall-パッケージマネージャーコンソールでこのコマンドを実行します
このコマンドは、「-ProjectName」の後に指定したプロジェクトに関連するすべてのパッケージを再インストールします。そして、ソリューションにすべてのパッケージを再インストールするのに30分待っていたので、これはより良いと思います。
Rodolpho Brockに感謝します。
また、リモートサーバーから変更をプルするときに、Visual Studioによって表示される[パッケージの復元]ボタンを押すことをお勧めします。
私はあなたがする必要がある最初のことはパッケージの復元機能を有効にすることだと思います。こちらもご覧ください。これはソリューション(プロジェクトではない)レベルで行われます。
しかし、それだけでは十分ではありません。復元機能を有効にした後、同様の問題に遭遇しました。(VS2013、NuGet 2.8)。
プロジェクトをコミットしたときに、パッケージをソース管理に(意図せずに)コミットしたことがわかりましたが、 Visual Studio(およびソース管理プラグイン)は、チェックインの実行時にバイナリを無視していたためです。
この問題は、リリースブランチを作成したときに発生しました。dev / main / trunkブランチのローカルコピーにはバイナリが含まれていました。これは、パッケージを最初にインストール/ダウンロードした場所だからです。
ただし、新しいリリースブランチでは、
.nupkg
ファイルはすべて揃っていたので、NuGetは復元するものがあるとは考えていませんでした。$(SolutionDir)/packages
(releaseブランチの下の)にあるすべてのパッケージフォルダーを削除してから、完全な再ビルドを実行しましたが、今回はビルドが成功しました。
...そしてもちろん、戻ってパッケージ管理フォルダーを(トランクおよびリリースブランチの)ソース管理から削除しました。repositories.config
ファイルも削除する必要があるかどうかは(まだ)わかりません。
プロジェクトテンプレートによってインストールされたコンポーネントの多く(少なくともWebプロジェクトの場合)は、NuGetパッケージです。つまり、この問題は、追加したパッケージに限定されません。
したがって、プロジェクト/ソリューションの作成後すぐにパッケージの復元を有効にし、最初のチェックインを実行する前に、packages
フォルダーをクリアします(.nuget
フォルダーをソース管理にコミットしていることを確認してください)。
免責事項:私はここでSOで別の回答を見ました。これは、packages
フォルダーのクリアが解決の一部であることを示しています。それで正しい方向に進んだので、著者にクレジットを与えたいのですが、その質問/回答を見つけることができなくなりました。偶然見つけた場合は、編集内容を投稿します。
また、 / ファイルUpdate-Package -reinstall
が変更されることにも注意してください。少なくともそれは私の場合にやったことです。どのIMHOがこのオプションの魅力を大幅に減らします。.sln
.csproj
.vbproj
私は試しました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
非常にうまくいきました。
ビルドサーバーがこれに陥ったためにここに到着した場合は、execコマンドを実行するMSBuildターゲットを作成して、以下のようにnuget restoreコマンドを実行できます(この場合、nuget.exeは.nugetフォルダー内ではなく、パス)。ソリューションをビルドする直前にTeamCityビルドステップで実行できます。
<Target Name="BeforeBuild">
<Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>
VS2012 V11では、行の最後で「-Reinstall」を使用すると機能しません。
だから私は単に使用しました:
Update-Package -ProjectName 'NAME_OF_THE_PROJECT'
私はこれが古い投稿であることを知っていますが、これは役に立つかもしれないと思いました。更新プロセス中に特定のパッケージを無視する必要がある場合(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) }
Visual Studio 2017の場合-IDEを使用してコンパイルすると、不足しているすべてのnugetパッケージがダウンロードされ、「packages」フォルダーに保存されます。
しかし、ビルドマシンでは、コンパイルはmsbuild.exeを使用して行われました。その場合、nuget.exeをダウンロードしました。
msbuild.exeを実行する前の各ビルドプロセス中。それは実行されます-> nuget.exe NAME_OF_SLN_Fileを復元します(.SLNファイルが1つしかない場合は、そのパラメーターを無視できます)。
MSbuild -t:restore Xxxx.sln