[.NET] NuGet を使用したプロジェクトを共有する

NuGet は便利なのですが、NuGet を利用したプロジェクトをソース管理へ登録したり配布したりして、他人と共有する場合にどうすればよいでしょうか?
Package フォルダを含めて登録(配布)すれば問題ないのですが、それだと NuGet を使ってパッケージ管理を行っている利点が少し薄れますよね。それに、管理されているパッケージのバイナリをソース管理で再管理したり、それらのバイナリを配布物として配布するなんてのはナンセンスです。
依存関係というメタデータだけを登録(配布)しておいて、各自の環境でパッケージのダウンロードやアップデートを行ってもらうのが理想ですね。しかし、下手なことで定評のある私の検索能力では、よくまとまった記事等を発見することができなかったので、NuGet を利用したプロジェクトをソース管理に登録したり配布する際の手順をメモっておきます。
単純に、NuGet を利用したプロジェクトを Package フォルダを除いて配布すると、受け取った人は依存パッケージがないためビルドができません。各プロジェクトが依存しているパッケージは package.config に記載されているのですが、package.config に記載されたパッケージをダウンロードしてビルドするにはどうしたらいいのでしょうか?

対応方法としてすぐに思いつくのは、Package Manager Console を使用する方法。依存パッケージは package.config という XML で保持されているので、PowerShell を少し使ったことがあれば Install Package コマンドに展開することは比較的簡単に可能でしょう。

# 1行で
PM> [xml] (Get-Content Project1\package.config)
  | select-xml //package
  | select -exp node
  |% { Install-Package $_.id -ignore -version $_.version }

みたいなかんじで簡単にインストールしなおせます。(それでもプロジェクト数が多い場合は、ループ等で処理しないと大変ですけど)しかし、これをすべての開発者に要求するのは難しいので、もう少し簡単にする方法が用意されていないかと調べてみました。

いくつか方法があるようですが、見つけたもので一番簡単そうな方法はプロジェクトを共有/配布する前に NuGetPowerTools を使用することのようです。
NuGet を使用して NuGetPowerTools をインストールすると、Enable-PackageBuild と Enable-PackageRestore という2つのコマンドが Package Manager Console に追加されます。今回使用するのは、Enable-PackageRestore です。
おもむろに、こいつを実行すると、ソリューション内のすべてのプロジェクトを処理してくれます。(オプションで個別指定等もできるようです)

PM> Enable-PackageRestore
Attempting to resolve dependency 'NuGet.CommandLine'.
Successfully installed 'NuGet.CommandLine 1.6.0'.
Successfully installed 'NuGet.Build 0.22'.

Copying nuget.exe and msbuild scripts to R:\Solution1\.nuget
Successfully uninstalled 'NuGet.Build 0.22'.
Successfully uninstalled 'NuGet.CommandLine 1.6.0'.

Don't forget to commit the .nuget folder
Updated 'WindowsFormsApplication2' to use 'NuGet.targets'
Updated 'WindowsFormsApplication1' to use 'NuGet.targets'
Enabled package restore for WindowsFormsApplication2
Enabled package restore for WindowsFormsApplication1

これは、WindowsFormsApplication1 と WindowsFormsApplication2 を含めたソリューションに対して実行したログで、コマンドライン版の NuGet と msbuild からコマンドライン版の NuGet を呼び出す定義ファイルを .nuget というフォルダにコピーしてくれています。ログにもありますが、この .nuget というフォルダをソース管理に登録したり配布するものとして含める必要があります。

これで、Visual Studiomsbuild から「ビルド」や「リビルド」を実行するだけで、NuGet Install-Package が自動的に行われるようになり、package.config から依存関係を解決して Package フォルダが自動的に再構築されるようになります。これで、ソース管理から取り出したりプロジェクトファイルを配布した場合でも、各自の環境で無事にビルドもできるプロジェクトになりました。

ちなみに、Package Manager Console を使用しなくても、ソリューションエクスプローラーにて、ソリューションを右クリックすると「Enable NuGet Package Restore」というメニューが追加されていますので、これを実行すれば OK です。