NuGet に関して最近はサボり気味だったので、久しぶりに真面目にオプションを調べました。基本的に NuGet の最新版がインストールされているものとして扱います。
NuGet PowerShell Reference | Microsoft Learn
公式のドキュメントにさらに情報が載っているので、こっちも一通り目を通しておくと良さそうです。
ダウングレード
プレリリース版を入れた後や Update-Package で意図しないバージョンになってしまった場合、-Version オプションを指定することでダウングレードが可能です。
Install-Package WindowsAzure.Storage -Version 4.3.0 Update-Package WindowsAzure.Storage -Version 4.3.0
Azure Storage Client のプレリリース版から 4.3.0 にバージョンを下げて試してみました。
依存関係を壊すことなく、パッケージのバージョンを下げることが出来ました。
パッチだけアップデート
Update-Package を何も考えずに実行すると、存在する最新バージョンに問答無用でアップデートされますが、互換性が問題になる場合があるので -Safe オプションを付けて事故を防ぎましょう。
Update-Package -Safe
Json.NET は更新されていませんが、OData 周りは 5.6.2 から 5.6.4 にアップデートされます。
同じメジャー、マイナーバージョン内で最新バージョンがインストールされました。
依存するパッケージのバージョンを指定
あまり更新されていないパッケージをインストールした場合、依存するパッケージのやたら古いバージョンがインストールされることがあります。以下は Azure Storage Client をインストールした直後の状態です。
流石に Json.NET の 5.0.8 とかありえないですし、この後に Update-Package するのも二度手間な感じです。
そういった問題のために -DependencyVersion オプションで、依存するパッケージのバージョンをある程度は指定してインストール出来るようになっています。
Install-Package WindowsAzure.Storage -DependencyVersion Highest
オプションに指定できる値は以下のようになっています。
- Lowest
- インストール可能なバージョン内で一番古い
- HighestPatch
- 同じメジャー、マイナーバージョン内で最新
- HighestMinor
- 同じメジャーバージョン内で最新
- Highest
- プレリリース版を除いた最新
デフォルトが HighestPatch なので、Json.NET の 6 系がインストールされることはありません。毎回明示的に指定するか、NuGet.config で設定をオーバーライドして対応する必要があります。
依存するパッケージごとを削除する
Uninstall-Package でパッケージを削除した場合、該当するパッケージのみが削除されて依存するパッケージはインストールされたままになります。
依存するパッケージも削除してほしいので、この場合は -RemoveDependencies オプションを指定します。
Uninstall-Package WindowsAzure.Storage -RemoveDependencies
これで実行すると依存するパッケージごとすべて削除してくれます。
依存関係が多いパッケージを削除する場合には注意しておきたいオプションです。
パッケージの再インストール
複数のソリューション間で NuGet のリポジトリを共有する - しばやん雑記 で書いたようにソリューション間に影響を及ぼすような変更を行った場合、パッケージの再インストールが必要になることがあります。
NuGet 公式サイトでも、再インストールは独立したドキュメントが公開されています。
Reinstalling and Updating NuGet Packages | Microsoft Learn
Update-Package に再インストール用の -Reinstall オプションがあるので、これを使うとバージョンはそのままで全パッケージの再インストールが可能です。
Update-Package -Reinstall
実行してみると、アンインストールした後に同じバージョンがインストールされています。
注意点としては、最初にアンインストールを行うためインストール途中でエラーになると packages.config が破損します。バージョン管理下で行っておくか、バックアップをしておかないと怖いです。