NuGet の動作を構成するConfiguring NuGet behavior

NuGet の動作は、1 つ以上の NuGet.Config (XML) ファイルの設定を総合して決まります。ファイルは、プロジェクト レベル、ユーザー レベル、およびコンピューター全体レベルで作成できます。NuGet's behavior is driven by the accumulated settings in one or more NuGet.Config (XML) files that can exist at project-, user-, and computer-wide levels. 具体的には、グローバル NuGetDefaults.Config ファイルでパッケージ ソースも構成されます。A global NuGetDefaults.Config file also specifically configures package sources. 設定は、CLI、パッケージ マネージャー コンソール、パッケージ マネージャー UI で発行されるすべてのコマンドに適用されます。Settings apply to all commands issued in the CLI, the Package Manager Console, and the Package Manager UI.

構成ファイルの場所と使用Config file locations and uses

スコープScope NuGet.Config ファイルの場所NuGet.Config file location 説明Description
プロジェクトProject 現在のフォルダー (プロジェクト フォルダーとも呼ばれる) またはドライブのルートまでの任意のフォルダー。Current folder (aka Project folder) or any folder up to the drive root. プロジェクト フォルダーにある場合は、設定はそのプロジェクトのみに適用されます。In a project folder, settings apply only to that project. 複数のプロジェクト サブフォルダーを含む親フォルダーにある場合は、設定はそれらのサブフォルダーのすべてのプロジェクトに適用されます。In parent folders that contain multiple projects subfolders, settings apply to all projects in those subfolders.
ユーザーUser Windows: %appdata%\NuGet\NuGet.ConfigWindows: %appdata%\NuGet\NuGet.Config
Mac/Linux: ~/.config/NuGet/NuGet.Config または ~/.nuget/NuGet/NuGet.Config (OS のディストリビューションによって異なります)Mac/Linux: ~/.config/NuGet/NuGet.Config or ~/.nuget/NuGet/NuGet.Config (varies by OS distribution)
設定はすべての操作に適用されますが、プロジェクト レベルの設定によって上書きされます。Settings apply to all operations, but are overridden by any project-level settings.
コンピューターComputer Windows: %ProgramFiles(x86)%\NuGet\ConfigWindows: %ProgramFiles(x86)%\NuGet\Config
Mac/Linux: $XDG_DATA_HOMEMac/Linux: $XDG_DATA_HOME. $XDG_DATA_HOME が null または空の場合は、~/.local/share または /usr/local/share が使用されます (OS 配布によって異なります)If $XDG_DATA_HOME is null or empty, ~/.local/share or /usr/local/share will be used (varies by OS distribution)
設定はそのコンピューターでのすべての操作に適用されますが、ユーザー レベルまたはプロジェクト レベルの設定によって上書きされます。Settings apply to all operations on the computer, but are overridden by any user- or project-level settings.

以前のバージョンの NuGet に関する注意事項:Notes for earlier versions of NuGet:

  • NuGet 3.3 以前では、ソリューション全体の設定用に .nuget フォルダーが使われていました。NuGet 3.3 and earlier used a .nuget folder for solution-wide settings. このファイルは、NuGet 3.4 以降では使用されません。This file is not used in NuGet 3.4+.
  • NuGet 2.6 から 3.x では、Windows でのコンピューター レベルの構成ファイルは %ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config にありました。{IDE} には VisualStudio を使用でき、{Version} は Visual Studio のバージョン (14.0 など)、{SKU}CommunityPro、または Enterprise です。For NuGet 2.6 to 3.x, the computer-level config file on Windows was located in %ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config, where {IDE} can be VisualStudio, {Version} was the Visual Studio version such as 14.0, and {SKU} is either Community, Pro, or Enterprise. 設定を NuGet 4.0 以降に移行するには、単に構成ファイルを %ProgramFiles(x86)%\NuGet\Config にコピーします。Linux の以前の場所は /etc/opt、Mac の以前の場所は /Library/Application Support でした。To migrate settings to NuGet 4.0+, simply copy the config file to %ProgramFiles(x86)%\NuGet\Config. On Linux, this previous location was /etc/opt, and on Mac, /Library/Application Support.

構成設定の変更Changing config settings

NuGet.Config ファイルは、NuGet の構成設定に関するトピックで説明されているように、キーと値のペアを含む単純な XML テキスト ファイルです。A NuGet.Config file is a simple XML text file containing key/value pairs as described in the NuGet Configuration Settings topic.

設定は、NuGet CLI の config コマンドを使って管理します。Settings are managed using the NuGet CLI config command:

  • 既定では、変更はユーザー レベルの構成ファイルに対して行われます。By default, changes are made to the user-level config file.
  • 別のファイルの設定を変更するには、-configFile スイッチを使います。To change settings in a different file, use the -configFile switch. その場合は、任意のファイル名を使うことができます。In this case files can use any filename.
  • キーは常に大文字と小文字が区別されます。Keys are always case sensitive.
  • コンピューター レベルの設定ファイルの設定を変更するには、特権の昇格が必要です。Elevation is required to change settings in the computer-level settings file.

警告

任意のテキスト エディターでファイルを変更できますが、NuGet (v3.4.3 以降) では、構成ファイルに正しくない形式の XML (タグの不一致、無効な引用符など) が含まれると、警告なしに構成ファイル全体が無視されます。Although you can modify the file in any text editor, NuGet (v3.4.3 and later) silently ignores the entire configuration file if it contains malformed XML (mismatched tags, invalid quotation marks, etc.). このため、設定の管理には nuget config を使うことをお勧めします。This is why it's preferable to manage setting using nuget config.

値の設定Setting a value

Windows の場合:Windows:

# Set repositoryPath in the user-level config file
nuget config -set repositoryPath=c:\packages 

# Set repositoryPath in project-level files
nuget config -set repositoryPath=c:\packages -configfile c:\my.Config
nuget config -set repositoryPath=c:\packages -configfile .\myApp\NuGet.Config

# Set repositoryPath in the computer-level file (requires elevation)
nuget config -set repositoryPath=c:\packages -configfile %ProgramFiles(x86)%\NuGet\Config\NuGet.Config

Mac/Linux の場合:Mac/Linux:

# Set repositoryPath in the user-level config file
nuget config -set repositoryPath=/home/packages 

# Set repositoryPath in project-level files
nuget config -set repositoryPath=/home/projects/packages -configfile /home/my.Config
nuget config -set repositoryPath=/home/packages -configfile home/myApp/NuGet.Config

# Set repositoryPath in the computer-level file (requires elevation)
nuget config -set repositoryPath=/home/packages -configfile $XDG_DATA_HOME/NuGet.Config

注意

NuGet 3.4 以降では、repositoryPath=%PACKAGEHOME% (Windows) および repositoryPath=%PACKAGEHOME (Mac/Linux) のように、すべての値で環境変数を使うことができます。In NuGet 3.4 and later you can use environment variables in any value, as in repositoryPath=%PACKAGEHOME% (Windows) and repositoryPath=%PACKAGEHOME (Mac/Linux).

値の削除Removing a value

値を削除するには、値を空にしてキーを指定します。To remove a value, specify a key with an empty value.

# Windows
nuget config -set repositoryPath= -configfile c:\my.Config

# Mac/Linux
nuget config -set repositoryPath= -configfile /home/my.Config

新しい構成ファイルの作成Creating a new config file

次のテンプレートを新しいファイルにコピーした後、nuget config -configFile <filename> を使って値を設定します。Copy the template below into the new file and then use nuget config -configFile <filename> to set values:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>

設定の適用方法How settings are applied

複数の NuGet.Config ファイルを使って設定を異なる場所に格納することで、1 つのプロジェクト、プロジェクトのグループ、またはすべてのプロジェクトに設定を適用できます。Multiple NuGet.Config files allow you to store settings in different locations so that they apply to a single project, a group of projects, or all projects. これらの設定は、コマンド ラインまたは Visual Studio から呼び出されるすべての NuGet 操作に集合的に適用され、プロジェクトまたは現在のフォルダーの "最も近く" に存在する設定が優先されます。These settings collectively apply to any NuGet operation invoked from the command line or from Visual Studio, with settings that exist "closest" to a project or the current folder taking precedence.

具体的には、NuGet は次の順序で異なる構成ファイルから設定を読み込みます。Specifically, NuGet loads settings from the different config files in the following order:

  1. NuGetDefaults.Config ファイル。パッケージ ソースのみに関連する設定が含まれます。The NuGetDefaults.Config file, which contains settings related only to package sources.
  2. コンピューター レベルのファイル。The computer-level file.
  3. ユーザー レベルのファイル。The user-level file.
  4. -configFile で指定されたファイル。The file specified with -configFile.
  5. ドライブ ルートから現在のフォルダー (nuget.exe が呼び出されたフォルダー、または Visual Studio プロジェクトを含むフォルダー) までの間のパスに存在するすべてのフォルダーで見つかったファイル。Files found in every folder in the path from the drive root to the current folder (where nuget.exe is invoked or the folder containing the Visual Studio project). たとえば、コマンドが c:\A\B\C で呼び出された場合、NuGet は c:,、c:\A、c:\A\B、c:\A\B\C の順序で構成ファイルを探して読み込みます。For example, if a command is invoked in c:\A\B\C, NuGet looks for and loads config files in c:, then c:\A, then c:\A\B, and finally c:\A\B\C.

NuGet はこれらのファイルで設定を探すので、適用は次のようになります。As NuGet finds settings in these files, they are applied as follows:

  1. 単一項目の要素の場合は、前に検出された同じキーの値が置き換えられます。For single-item elements, NuGet replaced any previously-found value for the same key. つまり、現在のフォルダーまたはプロジェクトに "最も近い" 設定が、それより前に見つかった他の値を上書きします。This means that settings that are "closest" to the current folder or project override any others found earlier. たとえば、NuGetDefaults.Config の設定 defaultPushSource は、他の構成ファイルにも存在する場合は上書きされます。For example, the defaultPushSource setting in NuGetDefaults.Config is overridden if it exists in any other config file.

  2. コレクション要素の場合は (<packageSources> など)、すべての構成ファイルの値が 1 つのコレクションに結合されます。For collection elements (such as <packageSources>), NuGet combines the values from all configuration files into a single collection.

  3. 指定されたノードに <clear /> が存在すると、そのノードより前に定義された構成値は無視されます。When <clear /> is present for a given node, NuGet ignores previously defined configuration values for that node.

設定のチュートリアルSettings walkthrough

2 つの異なるドライブに次のフォルダー構造があるものとします。Let's say you have the following folder structure on two separate drives:

disk_drive_1
    User
disk_drive_2
   Project1
     Source
   Project2
     Source
   tmp

その場合、次の場所にそれぞれ指定された内容の NuGet.Config ファイルが 4 つ存在します You then have four NuGet.Config files in the following locations with the given content. (コンピューター レベルのファイルはこの例には含まれませんが、ユーザー レベルのファイルと同じように動作します)。(The computer-level file is not included in this example, but would behave similarly to the user-level file.)

ファイル A. ユーザーレベルのファイル (Windows では %appdata%\NuGet\NuGet.Config、Mac/Linux では ~/.config/NuGet/NuGet.Config):File A. User-level file, (%appdata%\NuGet\NuGet.Config on Windows, ~/.config/NuGet/NuGet.Config on Mac/Linux):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <activePackageSource>
        <add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
    </activePackageSource>
</configuration>

ファイル B: disk_drive_2/NuGet.Config:File B. disk_drive_2/NuGet.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <config>
        <add key="repositoryPath" value="disk_drive_2/tmp" />
    </config>
    <packageRestore>
        <add key="enabled" value="True" />
    </packageRestore>
</configuration>

ファイル C: disk_drive_2/Project1/NuGet.Config:File C. disk_drive_2/Project1/NuGet.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <config>
        <add key="repositoryPath" value="External/Packages" />
        <add key="defaultPushSource" value="https://MyPrivateRepo/ES/api/v2/package" />
    </config>
    <packageSources>
        <clear /> <!-- ensure only the sources defined below are used -->
        <add key="MyPrivateRepo - ES" value="https://MyPrivateRepo/ES/nuget" />
    </packageSources>
</configuration>

ファイル D: disk_drive_2/Project2/NuGet.Config:File D. disk_drive_2/Project2/NuGet.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <!-- Add this repository to the list of available repositories -->
        <add key="MyPrivateRepo - DQ" value="https://MyPrivateRepo/DQ/nuget" />
    </packageSources>
</configuration>

NuGet は、呼び出された場所に応じて、次のように設定を読み込んで適用します。NuGet then loads and applies settings as follows, depending on where it's invoked:

  • disk_drive_1/users から呼び出された場合: disk_drive_1 で検出されるのはユーザー レベルの構成ファイル (A) だけなので、(A) で指定されている既定のリポジトリのみが使われます。Invoked from disk_drive_1/users: Only the default repository listed in the user-level configuration file (A) is used, because that's the only file found on disk_drive_1.

  • disk_drive_2/ または disk_drive_/tmp から呼び出された場合: NuGet は、最初にユーザー レベルのファイル (A) を読み込んだ後、disk_drive_2 のルートに移動して、ファイル (B) を検出します。Invoked from disk_drive_2/ or disk_drive_/tmp: The user-level file (A) is loaded first, then NuGet goes to the root of disk_drive_2 and finds file (B). NuGet は /tmp でも構成ファイルを検索しますが、見つかりません。NuGet also looks for a configuration file in /tmp but does not find one. その結果、nuget.org の既定のリポジトリが使われ、パッケージの復元が有効になり、パッケージが disk_drive_2/tmp に展開されます。As a result, the default repository on nuget.org is used, package restore is enabled, and packages get expanded in disk_drive_2/tmp.

  • disk_drive_2/Project1 または disk_drive_2/Project1/Source から呼び出された場合: NuGet は、最初にユーザー レベルのファイル (A) を読み込み、次に disk_drive_2 のルートからファイル (B) を読み込み、最後にファイル (C) を読み込みます。Invoked from disk_drive_2/Project1 or disk_drive_2/Project1/Source: The user-level file (A) is loaded first, then NuGet loads file (B) from the root of disk_drive_2, followed by file (C). (C) の設定で (B) および (A) の設定が上書きされるので、パッケージがインストールされる repositoryPath は、disk_drive_2/tmp ではなく disk_drive_2/Project1/External/Packages です。Settings in (C) override those in (B) and (A), so the repositoryPath where packages get installed is disk_drive_2/Project1/External/Packages instead of disk_drive_2/tmp. また、(C) は <packageSources> をクリアするので、ソースは https://MyPrivateRepo/ES/nuget だけになり、nuget.org は使うことができなくなります。Also, because (C) clears <packageSources>, nuget.org is no longer available as a source leaving only https://MyPrivateRepo/ES/nuget.

  • disk_drive_2/Project2 または disk_drive_2/Project2/Source から呼び出された場合: ユーザー レベルのファイル (A)、ファイル (B)、ファイル (D) の順に読み込まれます。Invoked from disk_drive_2/Project2 or disk_drive_2/Project2/Source: The user-level file (A) is loaded first followed by file (B) and file (D). packageSources はクリアされないので、nuget.orghttps://MyPrivateRepo/DQ/nuget の両方をソースとして使うことができます。Because packageSources is not cleared, both nuget.org and https://MyPrivateRepo/DQ/nuget are available as sources. パッケージは、(B) で指定されている disk_drive_2/tmp に展開されます。Packages get expanded in disk_drive_2/tmp as specified in (B).

NuGet の既定のファイルNuGet defaults file

パッケージのインストール元および更新元であるパッケージ ソースを指定し、nuget push でパッケージを公開するときの既定のターゲットを制御するため、NuGetDefaults.Config ファイルが存在します。The NuGetDefaults.Config file exists to specify package sources from which packages are installed and updated, and to control the default target for publishing packages with nuget push. 管理者は開発用およびビルド用のコンピューターに整合性のある NuGetDefaults.Config ファイルを容易に (たとえば、グループ ポリシーを使って) 展開できるので、組織内のすべてのユーザーが nuget.org ではなく適切なパッケージ ソースを使うようにすることができます。Because administrators can conveniently (using Group Policy, for example) deploy consistent NuGetDefaults.Config files to developer and build machines, they can ensuring that everyone in the organization is using the correct package sources rather than nuget.org.

重要

NuGetDefaults.Config ファイルにより、パッケージ ソースが開発者の NuGet 構成から削除されることはありません。The NuGetDefaults.Config file never causes a package source to be removed from a developer's NuGet configuration. つまり、開発者が既に NuGet を使っていて、したがって nuget.org パッケージ ソースが登録されている場合、NuGetDefaults.Config ファイルの作成後に nuget.org は削除されません。That means if the developer has already used NuGet and therefore has the nuget.org package source registered, it won't be removed after the creation of a NuGetDefaults.Config file.

さらに、NuGetDefaults.Config または NuGet の他のメカニズムのどちらでも、nuget.org などのパッケージ ソースへのアクセスを禁止することはできません。組織でこのようなアクセスをブロックする場合は、ファイアウォールなどの他の手段を使って行う必要があります。Furthermore, neither NuGetDefaults.Config nor any other mechanism in NuGet can prevent access to package sources like nuget.org. If an organization wishes to block such access, it much use other means such as firewalls to do so.

NuGetDefaults.Config の場所NuGetDefaults.Config location

次の表は、ターゲットの OS に応じた NuGetDefaults.Config ファイルの格納場所の一覧です。The following table describes where the NuGetDefaults.Config file should be stored, depending on the target OS:

OS プラットフォームOS Platform NuGetDefaults.Config の場所NuGetDefaults.Config Location
WindowsWindows Visual Studio 2017 または NuGet 4.x+: %ProgramFiles(x86)%\NuGet\ConfigVisual Studio 2017 or NuGet 4.x+: %ProgramFiles(x86)%\NuGet\Config
Visual Studio 2015 以前または NuGet 3.x 以前: %PROGRAMDATA%\NuGetVisual Studio 2015 and earlier or NuGet 3.x and earlier: %PROGRAMDATA%\NuGet
Mac/LinuxMac/Linux $XDG_DATA_HOME (通常は ~/.local/share または /usr/local/share。OS のディストリビューションに依存します)$XDG_DATA_HOME (typically ~/.local/share or /usr/local/share, depending on OS distribution)

NuGetDefaults.Config の設定NuGetDefaults.Config settings

  • packageSources: このコレクションは標準の構成ファイルの packageSources と同じ意味であり、既定のソースを指定します。packageSources: this collection has the same meaning as packageSources in regular config files and specifies the default sources. NuGet は、packages.config 管理形式を使用してプロジェクトのパッケージをインストールまたは更新するときに、ソースを順番に使用します。NuGet uses the sources in order when installing or updating packages in projects using the packages.config management format. PackageReference 形式を使用するプロジェクトの場合、構成ファイルの順序に関係なく、NuGet はまずローカル ソースを使用し、次にネットワーク共有のソースを使用し、次に HTTP ソースを使用します。For projects using the PackageReference format, NuGet uses local sources first, then sources on network shares, then HTTP sources, regardless of the order in the configuration files. 復元操作の場合、NuGet はソースの順序を常に無視します。NuGet always ignores the order of sources with restore operations.

  • disabledPackageSources: このコレクションも NuGet.Config ファイルと同じ意味であり、影響を受ける各ソースの名前と、ソースが無効かどうかを示す true/false の値を列記します。disabledPackageSources: this collection also has the same meaning as in NuGet.Config files, where each affected source is listed by its name and a true/false value indicating whether it's disabled. これにより、ソースの名前と URL を、既定で有効にしなくても、packageSources に残しておくことができます。This allows the source name and URL to remain in packageSources without having it turned on by default. 個々の開発者は、正しい URL を改めて調べなくても、他の NuGet.Config ファイルでソースの値を false に設定することにより、ソースを再び有効にできます。Individual developers can then re-enable the source by setting the source's value to false in other NuGet.Config files without having to find the correct URL again. これは、組織の内部ソースの URL の完全なリストを開発者に提供しながら、既定で個別のチームのソースのみを有効にする場合にも便利です。This is also useful to supply developers with a full list of internal source URLs for an organization while enabling only an individual team's source by default.

  • defaultPushSource: nuget push 操作の既定のターゲットを指定し、nuget.org の組み込みの既定値を上書きします。管理者がこの設定を展開すると、開発者は nuget.org に公開するには nuget push -Source を明示的に使う必要があるため、内部パッケージがパブリックの nuget.org に誤って公開されるのを防ぐことができます。defaultPushSource: specifies the default target for nuget push operations, overriding the built-in default of nuget.org. Administrators can deploy this setting to avoid publishing internal packages to the public nuget.org by accident, as developers specifically need to use nuget push -Source to publish to nuget.org.

NuGetDefaults.Config とアプリケーションの例Example NuGetDefaults.Config and application

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- defaultPushSource key works like the 'defaultPushSource' key of NuGet.Config files. -->
    <!-- This can be used by administrators to prevent accidental publishing of packages to nuget.org. -->
    <config>
        <add key="defaultPushSource" value="https://contoso.com/packages/" />
    </config>

    <!-- Default Package Sources; works like the 'packageSources' section of NuGet.Config files. -->
    <!-- This collection cannot be deleted or modified but can be disabled/enabled by users. -->
    <packageSources>
        <add key="Contoso Package Source" value="https://contoso.com/packages/" />
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    </packageSources>

    <!-- Default Package Sources that are disabled by default. -->
    <!-- Works like the 'disabledPackageSources' section of NuGet.Config files. -->
    <!-- Sources cannot be modified or deleted either but can be enabled/disabled by users. -->
    <disabledPackageSources>
        <add key="nuget.org" value="true" />
    </disabledPackageSources>
</configuration>