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


83

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


よく分からない。すべてのソリューションに対してのみ、nugetパッケージソースを構成できます。package.configファイルには、プロジェクトに必要なバージョンのnugetリポジトリが含まれています。自動的に更新しないでください。やりたいことの例を教えてください。
Shyamal Desai

1
@Shyamalパッケージ自体ではなく、NuGetパッケージソースについて話していました...その方法を理解しました。
BenAlabaster 2015年

回答:


136

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ドキュメントを読むと、すべてが明らかになります。以下で提供するソリューションを使用すると、単一のVisualStudioソリューションの構成をすばやく指定できます。

  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を入れていることを確認AREN 「tはこれらのパッケージのソースを使用するには、この共通のフォルダに含まれていません。


28
BenAlabasterに感謝します。あなただけの単純な、それを維持したい場合は、あなただけだけ含まれているファイルを持つことができます<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Rubenisme

13
これらの変更を有効にするには、VisualStudioを閉じてから再度開く必要がある場合があります。ソリューションを閉じてみましたが、それだけでは不十分でした。
ジェス

1
良い答えですが、設定例を必要なものだけに減らした方がよいでしょう。また、VS2015で試してみましたが、@ Jessのコメントはもう当てはまらないようです。ソリューションを再度開くと、新しいパッケージソースが取得されました。
ダニオ2017年

5

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

同社は、デフォルトでグローバルにすべてのソリューションを使用するために、カスタムのプライベートnugetフィードを構成し、そして私が使用した「プロトタイプ」アプリを作りたかった公共nugetフィードを

これ(そのソリューションのディレクトリ内)を使用すると、パブリック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でパブリックフィードを意図的に無効にしたため、上向きに無効にされたフィードをすべてクリアすることでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.