5

packagesソース管理にチェックインされたフォルダーを使用したソリューションがあります。依存関係を定義するのproject.jsonではなく、ファイルを使用するようにいくつかのプロジェクトを変更しました。packages.configプロジェクトはすべて通常の.csprojプロジェクトであり、DNX.xprojプロジェクトではありません。すべてが正しく機能しているように見えましたが、パッケージを更新した後、新しいバージョンがソリューションのpackagesフォルダーに追加されていないことに気付きました。代わりに、ユーザー プロファイル フォルダー内の NuGet の新しい共有パッケージ フォルダーに追加されました。

問題は、NuGet がpackages共有フォルダーではなくソリューションのフォルダーを使用するようにするにはどうすればよいかということです。

これまでに成功せずに試したアプローチ:

  • global.json指定したソリューション フォルダーにファイルを追加する"packages": "packages"
  • <add key="disableSourceControlIntegration" value="false" />での設定.nuget\nuget.config
4

1 に答える 1

2

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、当分の間そのままにしておくことができます。

于 2016-02-16T11:30:00.847 に答える