概要:ソリューション リポジトリ内のコマンド ラインから nuget.exe を実行するスクリプトがあります。特定のパッケージ ソースのみを使用するように NuGet を構成するにはどうすればよいでしょうか (マシン全体またはユーザーの構成にリストされているものは使用しません)。
NuGet のドキュメントから、複数の構成ファイルのチェーンに関する次の内容を読むことができます。
NuGet は、最初に既定の場所から NuGet.config を読み込み、次に現在のドライブのルートから現在のディレクトリで終わる NuGet.config という名前のファイルを読み込みます。(...)
<clear />
特定のノードに が存在する場合、このノードに対して以前に定義された構成アイテムは無視されます。
リポジトリのルートに、次の NuGet.Config ファイルを追加して、独自の内部 NuGet リポジトリからのみ NuGet パッケージをフェッチするようにしました。
<!-- C:\repository_root_path\NuGet.Config -->
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageRestore>
<add key="enabled" value="True" />
</packageRestore>
<packageSources>
<clear /> <!-- ensure only the sources defined below are used -->
<add key="Internal package source" value="\\network_fileshare\nuget_packages\" />
</packageSources>
<disabledPackageSources />
<activePackageSource>
<add key="Internal package source" value="\\network_fileshare\nuget_packages\" />
</activePackageSource>
</configuration>
現在発生している問題は、実行している NuGet.exe のバージョンによって結果が異なることです。デバッグするために、NuGet.exe の 3 つの個別のバージョンをダウンロードし、それらをすべてソリューションの .nuget-folder に配置しました。結果は次のとおりです。
C:\repository_root_path>Source\.nuget\nuget_2.5.40416.exe sources
Registered Sources:
1. Internal package source [Enabled]
\\network_fileshare\nuget_packages\
C:\repository_root_path>Source\.nuget\NuGet_2.6.40619.exe sources
Registered Sources:
1. NuGet official package source [Enabled]
https://nuget.org/api/v2/
2. Internal package source [Enabled]
\\network_fileshare\nuget_packages\
C:\repository_root_path>Source\.nuget\nuget_2.7.40808.exe sources
Registered Sources:
1. NuGet official package source [Enabled]
https://nuget.org/api/v2/
2. Internal package source [Enabled]
\\network_fileshare\nuget_packages\
3. https://www.nuget.org/api/v2/ [Disabled]
https://www.nuget.org/api/v2/
問題は、要素が無視されるようにバージョン 2.5 と 2.6 の間で NuGet にバグが導入されたの<clear />
か、それともソリューション ルートにある NuGet.Config ファイルに何か問題があるのかということです。