Распространенные конфигурации NuGet
Поведение NuGet зависит от накопленных параметров в одном или нескольких ФАЙЛАх конфигурации (XML), которые могут существовать в решении ( проект, если решение не используется), уровней пользователей и компьютеров.
Расположение и использование файла конфигурации
Область | Расположение файла NuGet.Config |
Описание |
---|---|---|
Решение | Текущая папка (т. е. папка решения) или любая другая папка вплоть до уровня корня диска. | Параметры папки решения применяются ко всем проектам во вложенных папках. Обратите внимание, что если файл конфигурации помещен в папку проекта, он никоим образом не влияет на проект. При восстановлении проекта в командной строке каталог проекта рассматривается как каталог решения, что может привести к различиям в поведении при восстановлении проекта и решения. |
User | Windows: %appdata%\NuGet\NuGet.Config Mac/Linux: ~/.config/NuGet/NuGet.Config или ~/.nuget/NuGet/NuGet.Config (зависит от инструментов) Дополнительные конфигурации поддерживаются на всех платформах. Эти конфигурации нельзя изменить с помощью инструментов. Виндоус: %appdata%\NuGet\config\*.Config Mac/Linux: ~/.config/NuGet/config/*.config или ~/.nuget/config/*.config |
Параметры применяются ко всем операциям, но переопределяются всеми параметрами уровня решения. |
Компьютер | Windows: %ProgramFiles(x86)%\NuGet\Config Mac/Linux: /etc/opt/NuGet/Config (Linux) или /Library/Application Support (Mac) по умолчанию. Если $NUGET_COMMON_APPLICATION_DATA значение не является пустым или пустым, $NUGET_COMMON_APPLICATION_DATA/NuGet/Config вместо этого |
Параметры применяются ко всем операциям на компьютере, но переопределяются любыми параметрами уровня пользователя или решения. |
Примечание.
В Mac/Linux расположение файла конфигурации пользователя зависит от инструментов. В .NET CLI используется ~/.nuget/NuGet
папка, а в Mono используется ~/.config/NuGet
папка.
В Mac/Linux расположение файла конфигурации на уровне пользователя зависит от инструментов
В Mac/Linux расположение файла конфигурации пользователя зависит от инструментов.
Большинство пользователей используют средства, которые ищут файл конфигурации пользователя в папке ~/.nuget/NuGet
.
Эти другие средства ищут файл конфигурации пользователя в папке ~/.config/NuGet
:
- Mono
- NuGet.exe
- Visual Studio 2019 для Mac (и более ранних версий)
- Visual Studio 2022 для Mac (и более поздних версий) только при работе с классическими проектами Mono.
Если используемое средство включает оба расположения, рекомендуется объединить их, выполнив следующие действия, чтобы разрешить работать только с одним файлом конфигурации уровня пользователя:
- Проверьте содержимое двух файлов конфигурации уровня пользователя и сохраните нужный файл в
~/.nuget/NuGet
папке. - Задайте символьную ссылку
~/.config/NuGet
из~/.nuget/NuGet
. Например, выполните команду bash:ln -s ~/.nuget/NuGet ~/.config/NuGet
Примечания для более ранних версий NuGet:
- В NuGet 3.3 и более ранних версий параметры уровня решения располагались в папке
.nuget
. В 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}
—Community
,Pro
илиEnterprise
. Чтобы перенести параметры в NuGet версии 4.0 или более поздней, просто скопируйте файл конфигурации в папку%ProgramFiles(x86)%\NuGet\Config
. На Linux использовалось расположение/etc/opt
, а на Mac —/Library/Application Support
.
Изменение параметров конфигурации
Файл NuGet.Config
представляет собой простой текстовый файл в формате XML, который содержит пары ключей и значений, описываемые в разделе Параметры конфигурации NuGet.
Управление параметрами осуществляется с помощью команды config command интерфейса командной строки NuGet:
- По умолчанию изменения вносятся в файл конфигурации уровня пользователя. (В Mac/Linux расположение файла конфигурации уровня пользователя зависит от инструментов)
- Для изменения параметров в другом файле используйте параметр
-configFile
. В таком случае файлы могут иметь любые имена. - Ключи всегда задаются с учетом регистра символов.
- Для изменения параметров в файле уровня компьютера требуется повышение прав.
Предупреждение
Файл конфигурации можно изменять в любом редакторе, однако если он будет содержать неправильно сформированный код XML (несоответствующие теги, неправильно используемые кавычки и т. д.), NuGet (версии 3.4.3 и более поздней) будет полностью игнорировать его без выдачи каких-либо уведомлений. Поэтому для управления параметрами рекомендуется использовать команду nuget config
.
Настройка значения
Windows:
# Set globalPackagesFolder in the user-level config file
dotnet nuget config set globalPackagesFolder "C:\packages"
# Set repositoryPath (available for packages.config only) in the user-level config file
dotnet nuget config set repositoryPath "C:\packages"
# Set repositoryPath in solution-level files
dotnet nuget config set repositoryPath "C:\packages" --configfile "C:\my.config"
dotnet nuget config set repositoryPath "c:\packages" --configfile "..\..\my.config"
# Set repositoryPath in the computer-level file (requires elevation)
dotnet nuget config set repositoryPath "c:\packages" --configfile "%appdata%\NuGet\NuGet.Config"
Mac/Linux:
# Set globalPackagesFolder in the user-level config file
dotnet nuget config set globalPackagesFolder /home/packages
# Set repositoryPath (available for packages.config only) in the user-level config file
dotnet nuget config set repositoryPath /home/packages
# Set repositoryPath in solution-level files
dotnet nuget config set repositoryPath /home/projects/packages --configfile /home/my.Config
dotnet nuget config set repositoryPath /home/packages --configfile home/myApp/NuGet.Config
# Set repositoryPath in the computer-level file (requires elevation)
dotnet nuget config set repositoryPath /home/packages --configfile $XDG_DATA_HOME/NuGet.Config
Примечание.
В NuGet 3.4 и более поздних версий можно использовать в любом значении переменные среды, такие как repositoryPath=%PACKAGEHOME%
(Windows) и repositoryPath=$PACKAGEHOME
(Mac/Linux).
Удаление значения
Чтобы удалить значение, укажите ключ с пустым значением.
# Windows
nuget config -set repositoryPath= -configfile c:\my.Config
# Mac/Linux
nuget config -set repositoryPath= -configfile /home/my.Config
Создание нового файла конфигурации
С помощью .NET CLI создайте конфигурацию nuget.config по умолчанию, выполнив команду dotnet new nugetconfig
.
Дополнительные сведения см. в командах dotnet CLI.
Кроме того, вручную скопируйте приведенный ниже шаблон в новый файл, а затем используйте nuget config -configFile <filename>
для задания значений:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
Порядок применения параметров
Несколько NuGet.Config
файлов позволяют хранить параметры в разных расположениях, чтобы они применялись к одному решению или группе решений.
Эти параметры совместно применяются к любой операции NuGet, вызываемой из командной строки или из Visual Studio, с параметрами, которые существуют "ближайшим" к решению или текущей папке с приоритетом.
Если средство командной строки используется в файле проекта, а не в файле решения, каталог проекта используется в качестве каталога решения, что может привести к несогласованности поведения при наличии NuGet.Config
файла в подкаталоге файла решения.
В частности, если файл конфигурации не указан явно в командной строке, NuGet загружает параметры из разных файлов конфигурации в следующем порядке:
- (Редко)
NuGetDefaults.Config
Файл, содержащий параметры, связанные только с источниками пакетов. - Файл уровня компьютера.
- Файл уровня пользователя.
- Файлы, найденные в каждой папке в пути от корневого диска к текущей папке (где
nuget.exe
вызывается или папка, содержащая решение Visual Studio). Например, если команда вызывается вc:\A\B\C
, NuGet ищет и загружает файлы конфигурации вc:\
, затем вc:\A
, вc:\A\B
и, наконец, вc:\A\B\C
.
Если файл конфигурации явно указан в командной строке, например nuget -configFile my.config
или dotnet restore --configfile my.config
только параметры из указанного файла будут использоваться.
Параметры, найденные в этих файлах, NuGet применяет следующим образом:
- Для элементов, состоящих из одного компонента, NuGet заменяет любое ранее найденное значение с тем же ключом. Это означает, что параметры, которые являются ближайшими к текущей папке или решению, переопределяют любые другие найденные ранее параметры. Например, параметр
defaultPushSource
в файлеNuGetDefaults.Config
будет переопределен аналогичным параметром, найденным в любом другом файле конфигурации. - Для элементов коллекции (таких как
<packageSources>
) NuGet объединяет значения из всех файлов конфигурации в одну коллекцию. - Если для заданного узла указан параметр
<clear />
, NuGet игнорирует ранее определенные значения конфигурации для этого узла.
Совет
nuget.config
Добавьте файл в корневой каталог репозитория решения. Рекомендуется использовать такой подход, так как он способствует повторяемости и гарантирует наличие одинаковой конфигурации NuGet у разных пользователей.
Пошаговое руководство по параметрам
Допустим, у вас есть следующая структура папок на двух отдельных дисках:
disk_drive_1
User
disk_drive_2
Project1
Source
Project2
Source
tmp
В показанных ниже расположениях присутствует четыре файла NuGet.Config
со следующим содержимым. (В этот пример не включен файл уровня компьютера, поведение которого аналогично файлу уровня пользователя.)
Файл А. Файл на уровне пользователей (%appdata%\NuGet\NuGet.Config
в Windows, ~/.config/NuGet/NuGet.Config
в Mac и Linux):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>
Файл Б. 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>
Файл В. 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>
Файл Г. 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 загружает и применяет параметры следующим образом, в зависимости от места вызова:
Вызов из
disk_drive_1/users
. Используется только репозиторий по умолчанию, представленный в файле конфигурации уровня пользователя (А), так как это единственный файл, найденный по путиdisk_drive_1
.Вызов из
disk_drive_2/
илиdisk_drive_/tmp
. Сначала загружается файл уровня пользователя (А), а затем NuGet переходит в кореньdisk_drive_2
и находит файл (Б). Кроме того, NuGet также ищет файл конфигурации в папке/tmp
, но не находит его. В результате используется репозиторий по умолчанию на веб-сайтеnuget.org
, включается восстановление пакетов и пакеты развертываются в папкеdisk_drive_2/tmp
.Вызов из
disk_drive_2/Project1
илиdisk_drive_2/Project1/Source
. Сначала загружается файл уровня пользователя (А), затем NuGet загружает файл (Б) из корняdisk_drive_2
, после чего загружается файл (В). Настройки в (В) переопределяют настройки в (Б) и (A), поэтому путемrepositoryPath
, по которому устанавливаются пакеты, будетdisk_drive_2/Project1/External/Packages
, а неdisk_drive_2/tmp
. Кроме того, поскольку файл (В) очищает<packageSources>
, веб-сайт nuget.org будет недоступен в качестве источника, и останется толькоhttps://MyPrivateRepo/ES/nuget
.Вызов из
disk_drive_2/Project2
илиdisk_drive_2/Project2/Source
. Сначала загружается файл уровня пользователя (А), а затем файл (Б) и файл (Г). ПосколькуpackageSources
не очищается, в качестве источников будут доступны одновременноnuget.org
иhttps://MyPrivateRepo/DQ/nuget
. Пакеты развертываются по путиdisk_drive_2/tmp
, заданному в файле (Б).
Дополнительная конфигурация на уровне пользователя
Начиная с версии 5.7 в NuGet появилась поддержка дополнительных файлов конфигурации на уровне пользователя. Это позволяет сторонним поставщикам добавлять дополнительные пользовательские файлы конфигурации без повышения прав.
Эти файлы конфигурации находятся в стандартной пользовательской папке конфигурации в подпапке config
.
Будут учитываться все файлы, которые имеют расширение .config
или .Config
.
Эти файлы нельзя изменить стандартными инструментами.
Платформа ОС | Дополнительные конфигурации |
---|---|
Windows | %appdata%\NuGet\config\*.Config |
Mac/Linux | ~/.config/NuGet/config/*.config или ~/.nuget/config/*.config |
Файл параметров по умолчанию NuGet
Это NuGetDefaults.Config
редкость и может указывать только источники пакетов, из которых устанавливаются и обновляются пакеты, или управлять целевым объектом по умолчанию для публикации пакетов.nuget push
Так как администраторы могут удобно (например, с помощью групповой политики) развертывать согласованные NuGetDefaults.Config
файлы на компьютерах разработчиков и сборок, они могут гарантировать, что все пользователи в организации используют согласованные источники пакетов, независимо от того, включают ли они nuget.org.
Внимание
Файл NuGetDefaults.Config
никогда не вызывает удаление источника пакетов из конфигурации NuGet разработчика. Это означает, что если разработчик уже использовал NuGet и для него зарегистрирован источник пакетов nuget.org, он не будет использован после создания файла NuGetDefaults.Config
.
Кроме того, ни ни какой-либо NuGetDefaults.Config
другой механизм в NuGet не может запретить доступ к источникам пакетов, таким как nuget.org. Если организация хочет заблокировать такой доступ, она должна использовать другие средства, такие как брандмауэры для этого.
Расположение NuGetDefaults.Config
В следующей таблице указано, где следует хранить файл NuGetDefaults.Config
в зависимости от целевой ОС.
Платформа ОС | NuGetDefaults.Config Местоположение |
---|---|
Windows | Visual Studio 2017 или NuGet 4.x+: %ProgramFiles(x86)%\NuGet Visual Studio 2015 или более ранней версии либо NuGet 3.x или более ранней версии: %PROGRAMDATA%\NuGet |
Mac/Linux | $XDG_DATA_HOME (обычно ~/.local/share или /usr/local/share , в зависимости от дистрибутива ОС) |
Параметры в файле NuGetDefaults.Config
packageSources
. Эта коллекция имеет то же значение, что иpackageSources
в обычных файлах конфигурации и задает источники по умолчанию. NuGet использует эти источники в указанном порядке при установке или обновлении пакетов в проектах с помощью формата управленияpackages.config
. Для проектов, в которых используется формат PackageReference, NuGet сначала использует локальные источники, затем — источники в сетевых папках, а после этого — HTTP-источники, независимо от порядка, заданного в файлах конфигурации. NuGet всегда игнорирует порядок источников при операциях восстановления.disabledPackageSources
. Эта коллекция имеет то же значение, что и в файлахNuGet.Config
, где каждый затрагиваемый источник перечислен по имени и значениюtrue
/false
, указывающему, включен он или отключен. Это позволяет сохранять имя и URL-адрес источника вpackageSources
, не включая его по умолчанию. Отдельные разработчики при необходимости могут повторно включить источник, присвоив параметру источника значениеfalse
в других файлахNuGet.Config
, не выполняя повторный поиск правильного URL-адреса. Также рекомендуется предоставить разработчикам полный список URL-адресов внутренних источников для организации, но включить по умолчанию только источник для отдельной группы.defaultPushSource
задает целевой объект по умолчанию для операцийnuget push
, переопределяя встроенное значение по умолчаниюnuget.org
. Администраторы могут развертывать этот параметр, чтобы избежать случайной публикации внутренних пакетов на открытом веб-сайтеnuget.org
, поскольку разработчикам придется специально использовать командуnuget push -Source
для публикации на веб-сайтеnuget.org
.
Пример файла NuGetDefaults.Config и приложения
<?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>