最近、NuGetパッケージを書いてローカルでプロジェクト間をやり取りするというテクニックをかじりました。

NuGetパッケージ作戦を導入するまで、ライブラリ、アドイン、テスト、インタフェース、UIなどを1つの巨大なソリューションにまとめていました。 そうすると、ソリューションのリビルドの際にやたらと時間がかかってしまい、また、ソリューション外にライブラリを持ち出さない前提でコードを書いていたため、ソリューション内に限った再利用性に留まっていました。 Visual Studioの起動にも、やたらと時間がかかるようになってしまい、とりあえずバラせるやつはバラす方針になりました。

NuGetパッケージができるまで

NuGetのパッケージ作成はわかってしまえば簡単です。

  1. AssemblyInfo.csを埋める
  2. .nuspecファイルを作成する
  3. Install.ps1を書く(任意)
  4. nuget packでパッケージ化

パッケージ化に際して、わたしは以下のオプションで、自動で所定のフォルダにパッケージが配置されるように指定しています。 これをBuild EventのPost-build eventに仕込みます。

nuget pack $(ProjectFileName) -outputdirectory D:\Development\NuGetServer\Packages\$(TargetName) -nopackageanalysis

ローカルからローカルに引き込む

NuGetのパッケージソースにローカルを指定する場合、 [Tools→Options→NuGet Package Manager→Package Sources]にある[Avaliable Package Sources]にローカルを追加してください。 :heavy_plus_sign:を押して下の[Name]と[Source]を埋めれば使用できると思います。たぶん。

NuGetを使ったときに引っかかったこと

NuGetパッケージは、プロジェクト、ソリューションを切り離しているため、バージョンが異なる場合があります。 めんどくさかったのが、パッケージにバグがついており、それを直したつもりでも、使用しているパッケージの更新をすることを忘れていたため、いつまでたっても同じバグを「おかしいなぁ」となぞり続けていたことです。 勘のいいVisual Studioは「ソースのバージョンが違うやで」と教えてくれますが、「知らん、かまへん、やれ」と突撃してしまったため、気づくのが遅くなってしまいました。