1. ホーム
  2. visual-studio

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

2022-12-16 08:40:02

質問

Visual Studio が NuGet パッケージ ソースの設定をすべてのソリューションに適用するのではなく、ソリューションごとに適用する方法をご存知の方はいらっしゃいますか。 私は、それぞれが独自のプライベートNuGetリポジトリを持っている複数のプロジェクトで作業しているため、バージョン管理の問題を抱え続けています。どの NuGet レポがどのプロジェクトに属しているかを記憶し続け、正しいプロジェクトに正しいものを適用するのは、***の痛みです。

どのように解決するのですか?

TLDR:はい

NuGet は、Windows ユーザー プロファイル レベルの NuGet.config から始まり、ソリューションを含むファイル パスのルートから始めてより詳細な設定を適用し、最終的にソリューション ファイルを含むディレクトリで終了するパッケージ ソースの階層的なアプリケーションを使用します。

親切な Twitter ユーザーがこのドキュメントを紹介してくれたおかげで、私が何とか理解できたことがここにあります。

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

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

NuGet ドキュメントを読めばすべてが明らかになりますが、私が以下に提供するソリューションは、単一の Visual Studio ソリューションの設定を迅速に指定することを可能にします。

  1. APPDATA%EnterpriseNuGet に移動して、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 をその共通のディレクトリに配置します。 でないプロジェクトのソリューション フォルダが を使用しないプロジェクトのソリューション フォルダーは、この共通フォルダーに含まれないようにします。