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 のオプション
-> パッケージマネージャ
から パッケージの復元
オプションにチェック
2. Visual Studio からソリューションのコンテキストメニューを開きNuGetパッケージ復元の有効化
を選択。
.nuget
フォルダやらもろもろが追加されます。
どうなるか?
この状態であれば package フォルダが vcs に入っていなくても、ビルド時に勝手にとりに行ってくれます。もちろん Visual Studio からでなく MSBuild を直で叩いても同じだから CI と組み合わせ得る時も大丈夫(インターネットにつながっている必要はあるか、社内にリポジトリ立てるか)。
VCS に入れる時は
package フォルダはいらないけど、各プロジェクトの packages.config
と .nuget
フォルダ配下が無いと困るのでそこだけ入れましょう。nuget.exe ぐらいは同じの見れないかなとは思いますが。
さあ、これで Github のリポジトリを掃除だ!
ついでに
すでに入ってしまった package を git の管理下から外すには
git rm --cached packages/
でOK。ついでに .gitignore
にも packages/ を追加すると良い。
参考にさせていただいた
- Project Silk と Liike のビルドと実行 - miso_soup3 この方のブログは参照率高い、ありがたい限り。