NuGet 3.2では、環境変数 を使用して共有グローバル パッケージ フォルダーを指定するためのサポートが追加されましたNUGET_PACKAGES
。別のグローバル パッケージ フォルダーへのフル パスを設定できますが、単に変数を "packages" に設定すると、Visual Studio の NuGet ツールがそれをソリューション フォルダーの下の相対パスとして扱うことがわかりました。packages
これにより、ソリューションのフォルダーを使用して NuGet パッケージをインストールおよび復元できました。
残念ながら、プロジェクトをビルドするとMicrosoft.NuGet.targets
、NuGet パッケージが見つからないというエラーが表示されました。msbuildのNugetPackagesDirectory
プロパティが設定されていないようです。これを回避するために、次の行をC:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.props
ファイルに追加しました。
<PropertyGroup Condition="'$(NugetPackagesDirectory)' == ''">
<NugetPackagesDirectory>$(SolutionDir)packages</NugetPackagesDirectory>
</PropertyGroup>
これはマシン上のすべてのソリューションに影響するため、各プロジェクト ファイルに同じ行を追加するか、各プロジェクトprops
にインポートするソリューションのカスタム ファイルに追加することもできます。これは、ビルド サーバーにも必要な場合があります。
これは機能しますが、欠点は、packages フォルダーの構造が とは異なり、packages\<package_name>\<version>\
更新packages\<package_name>.<version>\
またはアンインストール後にパッケージの古いバージョンまたは未使用のバージョンが削除されないことです。パッケージ ディレクトリを手動でクリアし、変更後に必要なパッケージを復元すると、同じ結果が得られます。
個人的には、ソリューションごとに設定する必要がある何かのグローバル設定を設定する必要があるため、これは本当にハッキリしています。NuGet は、ソリューション パッケージごとのディレクトリをサポートするために、ある時点で更新される予定ですが、それまでの間project.json
は、上記の回避策を使用するかpackages.config
、当分の間そのままにしておくことができます。