私たちは、異なるチームがより大きな製品の異なる部分で作業するシナリオを持っています。時々、すべてのソリューションのすべてのVisual Studioプロジェクトは、参照されているNuGetパッケージの一部を更新する必要があります。この更新の結果、ソースツリー全体のすべてのプロジェクトが同じバージョンのパッケージを参照するようになります。
特定のNuGetパッケージを特定のバージョンに更新する方法はありますかすべてのプロジェクトで自動アプローチのようにPowerShellスクリプトを使用して?
編集:Visual StudioとNuGetの必要な部分を何らかの方法でロードする方法もありますアセンブリ参照を正しく更新する?
例:
NuGetScript Update Solution.sln PackageName -version NewVersion
または
NuGetScript Update PathToProjects PackageName -version NewVersion
コンポーネントが多すぎて、Visual Studioにすべてをロードし、パッケージマネージャーUIを介して手動で更新することができません。
PowerShellスクリプトを作成して、ソリューション内のすべてのプロジェクトファイルまたはpackages.configファイルを検索し、次に nuget update コマンドを呼び出してパッケージを更新できます。
ただし、Visual Studioの外部でパッケージを更新する場合は制限があります。これをVisual Studioから行うことをお勧めします。
Updateコマンドは、すべての新しいパッケージをダウンロードしてパッケージフォルダーに抽出します。アセンブリ参照はプロジェクトファイルで更新されますが、これは既存の参照のみに限定されます。新しいパッケージにアセンブリが追加されている場合、それは更新コマンドの一部として追加されません。新しいパッケージの依存関係にも、アセンブリ参照が追加されません。完全な更新を実行するには、Visual Studioを使用します。
1つのソリューションで特定のパッケージを更新するには、パッケージマネージャーコンソールウィンドウで次のコマンドラインを使用してください。
Get-Project -All | Update-Package PackageName -Version newVersion
次のスクリプトは別の場所で見つかりました。自分のプロジェクトで試しました。元のリンクがありません
次のスクリプトは行います:
restore
コマンドを実行しますpackages.config
ファイルを検索しますpackages.config
ファイルとパッケージ名を使用してupdate
コマンドを実行しますこれは、nuget.exeがこれを実行するフォルダーにあることを前提としています。
param(
[Parameter(Mandatory=$true)]
[string]$packageId
)
Get-ChildItem *.sln -recurse | %{.\\nuget.exe restore $_.fullname}
Get-ChildItem packages.config -Recurse `
| Where-Object {$_ | Select-String -Pattern $packageId} `
| %{.\\nuget.exe update -Id $packageId $_.FullName}