NuGet 管理のライブラリを復元できるように設定する

てゆうか

まあそもそも NuGet みたいなパッケージマネージャを使う文化も無かったので、いざ「使えるものは NuGet から取ろうよ」となった後も Github に NuGet の package フォルダ毎ツッコむという荒業をやっていたせいで、どんどん初回の fetch やら checkout やらが巨大になっていった訳ですよ。。
Maven で育った身としては「え、これってこうなの?」的な疑問はありつつも、やってた訳ですが、やっぱり普通にビルド時に取りにいけますよね。。

NuGetPowerTools

NuGet が 2.0 になるまでは、パッケージのリストア機能が無かったのですよね。で、NuGetPowerTools ってのが代わりにあってそれを使えばコマンド打つ必要ありましたけどリストアできてました。
ただ、NuGetPowerTools がやってた事って、今の NuGet がリストアに使っている機構とほぼ同じだろうなと思います。(マージされたのかな?)

NuGet 2.0

このバージョンからリストア機能が搭載されてるみたいです。(たぶん)

設定方法

Visual Studio で、たった 2 ステップ。ただし 2 つ目はソリューション毎の設定が必要。

1. Visual Studioオプション -> パッケージマネージャ から パッケージの復元オプションにチェック

f:id:dany1468:20130421113207p:plain

2. Visual Studio からソリューションのコンテキストメニューを開きNuGetパッケージ復元の有効化を選択。

f:id:dany1468:20130421113358p:plain

.nuget フォルダやらもろもろが追加されます。

f:id:dany1468:20130421113607p:plain

どうなるか?

この状態であれば package フォルダが vcs に入っていなくても、ビルド時に勝手にとりに行ってくれます。もちろん Visual Studio からでなく MSBuild を直で叩いても同じだから CI と組み合わせ得る時も大丈夫(インターネットにつながっている必要はあるか、社内にリポジトリ立てるか)。

VCS に入れる時は

package フォルダはいらないけど、各プロジェクトの packages.config.nuget フォルダ配下が無いと困るのでそこだけ入れましょう。nuget.exe ぐらいは同じの見れないかなとは思いますが。

さあ、これで Github のリポジトリを掃除だ!

ついでに

すでに入ってしまった package を git の管理下から外すには

git rm --cached packages/

でOK。ついでに .gitignore にも packages/ を追加すると良い。

参考にさせていただいた