しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

NuGet のオプションをよく忘れるのでまとめておく

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 が破損します。バージョン管理下で行っておくか、バックアップをしておかないと怖いです。