しばやん雑記

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

Visual Studio 2017 での NuGet アップデートが良い感じだった

全然追っていなかったのですが Visual Studio 2017 で NuGet 周りにこれまでで一番手が入るようです。NuGet のリリース以来、最大のアップデートと言ってもいい感じがします。

packages.config ではなくて MSBuild での PackageReference が、これまでの .NET Framework プロジェクトでも使えるようになるみたいです。.NET Core に限らず使えるのはかなり良さそうです。

NuGet – .NET Framework, UWP, .NET Core and other .NET projects can now use PackageReference instead of packages.config for NuGet dependencies.

Announcing .NET Core, .NET Native and NuGet Updates in VS 2017 RC | .NET Blog

NuGet の設定からデフォルトのフォーマットを変更出来るようになっています。

f:id:shiba-yan:20170201003649p:plain

設定を変更しても、既存のプロジェクトのフォーマットが変換されるわけではないです。

.NET Framework のコンソールアプリケーションに WindowsAzure.Storage をインストールすると、参照が PackageReference を使った方がすっきりと分かりやすくなっています。

f:id:shiba-yan:20170201004052p:plain

ゼロから追加する分には問題ないですが、ASP.NET アプリケーションなどテンプレートで用意されているものに関しては、packages.config のままになってしまうので、マイグレーション用のツールを書きました。

ビルドしてプロジェクトファイルのパスを渡すと、ある程度まではいい感じに変換します。

単純に packages.config から変換するのではなく、パッケージ間の依存関係を調べて最小限のパッケージだけを参照するようにしています。

実際に ASP.NET MVC アプリケーションのプロジェクトを変換すると以下のようになります。

f:id:shiba-yan:20170201004211p:plain

Web API のパッケージが 1 つだけになっていたり、シンプルになっています。

しかしまだ .NET Core の参照表示のように、それぞれの NuGet パッケージの依存関係をツリーで表示することは出来ないみたいです。右クリックで削除も出来ないので、地味にこれは不便です。

f:id:shiba-yan:20170201005358p:plain

RTM までに .NET Core と同じ機能まで持っていってくれると非常にありがたいです。

とはいえ、Visual Studio 2015 までより大幅に改善されているので、早く移行したいです。