web-dev-qa-db-ja.com

ソリューションごとにNuGetパッケージソースの設定を行う方法はありますか?

Visual Studioで、すべてのソリューションではなくソリューションごとにNuGetパッケージソース構成を適用する方法を知っている人はいますか?それぞれ独自のプライベートNuGetリポジトリを持つ複数のプロジェクトで作業しているため、バージョン管理の問題が発生し続けています。 ***では、どのNuGetリポジトリがどのプロジェクトに属しているかを思い出し、戻って正しいプロジェクトに正しいものを適用し続けるのは面倒です。

62
BenAlabaster

TLDR:はい

NuGetは、WindowsユーザープロファイルのレベルでNuGet.configから始まり、ソリューションを含むファイルパスのルートで始まり、最終的にはソリューションファイル。

だからここに私が見つけ出したものがあります-この文書を教えてくれる有用なツイッターの好意による:

https://docs.nuget.org/consume/nuget-config-file

Visual StudioのTools > NuGet Package Manager > Package Manager Settings: Package SourcesオプションでNuGetパッケージソースを編集すると、%APPDATA%\NuGetディレクトリにあるNuGet.configファイルにデフォルトでそれらの変更が適用されます。ソリューションごと(またはソリューションのグループごと)にこれらの設定をオーバーライドするには、1つまたは複数のソリューションのパスに沿って戦略的に配置されたNuGet.configファイルを追加する必要があります。

NuGetドキュメントを読むとすべてが明確になります。以下で提供するソリューションを使用すると、単一のVisual Studioソリューションの構成をすばやく指定できます。

  1. %APPDATA%\ NuGetに移動し、NuGet.configのコピーを取得します
  2. ソリューションのルート、つまりApplication.slnが存在する場所にコピーをダンプします。
  3. このソリューションに関連するNuGetパッケージソースのみを含むようにコピーを編集して、ユーザープロファイルに適用される既定値をオーバーライドします。たとえば、このソリューションの独自のパッケージを含むが、他のプロジェクトには適用しないプライベートNuGetソース- 例えば:
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>

  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>

  <packageSources>

    <!-- Ditch all the Global NuGet package sources we only want a 
         single private NuGet repo for this project -->
    <clear />

    <!-- Add the private NuGet package source for this solution -->
    <add key="My Private NuGet Server" value="http://myprivatenuget.com:8080/nuget" />

  </packageSources>

  <disabledPackageSources>

    <!-- Add any package sources to ignore here using the same keys as 
         defined in the packageSources list above-->

    <!--<add key="nuget.org" value="true" />-->

    <add key="Microsoft and .NET" value="true" />

  </disabledPackageSources>

</configuration>

構成を複数のソリューションに適用する場合は、ソリューションフォルダーがすべて共通のディレクトリに含まれていることを確認し、その共通のディレクトリにあるそれらのソリューションに関連するパッケージソースのNuGet.configを配置します。 are n'tこれらのパッケージソースを使用するには、この共通フォルダーに含まれていません。

111
BenAlabaster

BenAlabasterが提供する優れた答えに追加したいと思います。私は幾分反対の問題がありました:

会社は、デフォルトですべてのソリューションで使用するためにカスタムのプライベートnugetフィードをグローバルに設定しましたが、 public nuget feed

これにより(そのソリューションのディレクトリ内で)、パブリックnugetフィードは私の特定のソリューションでのみ利用可能になりますが、会社のフィードは他のすべてのソリューションのデフォルトのままです:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
    <!-- Make sure we use the public nuget -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <disabledPackageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
  </disabledPackageSources>
</configuration>

キーは、%APPDATA%\ NuGetのNuGet.configでパブリックフィードを意図的に無効にしたため、上向きに無効化されたすべてのフィードをクリアすることでした

3
Marcel