NuGet 2.7 と Visual Studio におけるパッケージ復元機能の強化
今回は、NuGet 2.7 で強化された Visual Studio 2012 / Visual Studio 2013 の NuGet パッケージの自動復元機能のお話です。
以前、こちらのブログ記事 "ASP.NET でソース管理システムへの NuGet パッケージのコミットを不要とする" で「NuGet パッケージの復元の有効化」機能をご紹介しました。
非常に多くの NuGet パッケージを含むようになってきた ASP.NET プロジェクトで、この「NuGet パッケージの復元の有効化」を有効にすると、ビルドに必要な NuGet パッケージが無い場合には自動的にダウンロード/リストアされるようになり、 TFS などのソースコード バージョン管理システムなどで管理する場合にビルドで必要な NuGet パッケージのバイナリ ファイルをコミットする必要がなくなります。
しかし、その代わりにソリューションに .nuget フォルダーが作られ、その中に NuGet.exe が追加されるようになります。
※ エクスプローラで見た、ソリューションの .nuget フォルダー
● NuGet 2.7 におけるパッケージ 復元機能の強化
NuGet 2.7 から、この NuGet パッケージ復元機能が強化され、上記のファイルのうち、NuGet.exe と NuGet.targets の 2 つのファイルはパッケージの復元の実行には不要となり、ソリューションから削除することができるようになりました。
但し、NuGet.Config ファイルだけは、ソース管理に NuGet パッケージのバイナリファイルの追加を無効にする設定が記述されているため、このファイルは必要になります。
参考:NuGet.Config ファイル
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
という訳で、思い切ってソリューションから NuGet.exe と NuGet.targets ファイルを削除してしまいましょう。
※ 実際のフォルダからも NuGet.targets と NuGet.exe ファイルを削除します。このファイルがフォルダーに残った状態の場合、後述する NuGet パッケージ復元のプログレス ダイアログが表示されません。
参考までに、ソリューションファイル (*.sln) は、下記のような感じで NuGet.Config だけの記述になります。
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{...}") = ".nuget", ".nuget", "{...}"
ProjectSection(SolutionItems) = preProject
.nuget\NuGet.Config = .nuget\NuGet.Config
EndProjectSection
EndProject
加えて、プロジェクトファイル (*.csproj / *.vbproj) をエディターで開くと、最後の方に NuGet.targets ファイルへの参照記述がありますので、このままでも実行には差し支えありませんが、念のため削除しておきましょう。
プロジェクトファイル (*.csproj / *.vbproj) にある下記一行を削除
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
以上で修正は終わりです。もしも、ビルド時にソリューションフォルダー内の packages フォルダーがない場合や、いずれかの NuGet パッケージが不足している場合には、ビルド時に下記のようなダイアログが表示され、NuGet パッケージが自動的にリストアされるようになります。
ソリューションが少しすっきりして気持ちいいですね。NuGet は、もはや Visual Studio から切っても切れない機能となりましたが、今回のアップデートも、いずれは Visual Stuido 側でも対応になるのではないでしょうか。いずれにしても手動で簡単に対応できますので、ぜひお試しいただきまして、快適な NuGet ライフをお過ごしください。
※ 参考情報 ※