web-dev-qa-db-ja.com

NuGet:PowerShellまたはCMDを介してすべてのプロジェクトでパッケージを特定のバージョンに更新します

私たちは、異なるチームがより大きな製品の異なる部分で作業するシナリオを持っています。時々、すべてのソリューションのすべてのVisual Studioプロジェクトは、参照されているNuGetパッケージの一部を更新する必要があります。この更新の結果、ソースツリー全体のすべてのプロジェクトが同じバージョンのパッケージを参照するようになります。

特定のNuGetパッケージを特定のバージョンに更新する方法はありますかすべてのプロジェクトで自動アプローチのようにPowerShellスクリプトを使用して?

編集:Visual StudioとNuGetの必要な部分を何らかの方法でロードする方法もありますアセンブリ参照を正しく更新する

例:

NuGetScript Update Solution.sln PackageName -version NewVersion

または

NuGetScript Update PathToProjects PackageName -version NewVersion

コンポーネントが多すぎて、Visual Studioにすべてをロードし、パッケージマネージャーUIを介して手動で更新することができません。

17

PowerShellスクリプトを作成して、ソリューション内のすべてのプロジェクトファイルまたはpackages.configファイルを検索し、次に nuget update コマンドを呼び出してパッケージを更新できます。

ただし、Visual Studioの外部でパッケージを更新する場合は制限があります。これをVisual Studioから行うことをお勧めします。

Updateコマンドは、すべての新しいパッケージをダウンロードしてパッケージフォルダーに抽出します。アセンブリ参照はプロジェクトファイルで更新されますが、これは既存の参照のみに限定されます。新しいパッケージにアセンブリが追加されている場合、それは更新コマンドの一部として追加されません。新しいパッケージの依存関係にも、アセンブリ参照が追加されません。完全な更新を実行するには、Visual Studioを使用します。

6

1つのソリューションで特定のパッケージを更新するには、パッケージマネージャーコンソールウィンドウで次のコマンドラインを使用してください。

Get-Project -All | Update-Package PackageName -Version newVersion

21
Wendy

次のスクリプトは別の場所で見つかりました。自分のプロジェクトで試しました。元のリンクがありません

次のスクリプトは行います:

  1. フォルダ内で見つかったすべてのソリューションに対してrestoreコマンドを実行します
  2. 指定されたパッケージID名を含むすべてのpackages.configファイルを検索します
  3. パラメータとして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}
2
jdelgado