Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Поведение NuGet зависит от накопленных параметров в одном или нескольких файлах конфигурации (XML), которые могут существовать на уровне решения (проекта, если решение не используется), пользователя и компьютера.
Расположения файлов конфигурации и использование
| Scope |
NuGet.Config Расположение файла |
Description |
|---|---|---|
| Solution | Текущая папка (также называемая папкой решения) или любая папка вплоть до корня диска. | В папке решения параметры применяются ко всем проектам в вложенных папках. Обратите внимание, что если файл конфигурации помещается в папку проекта, он не влияет на этот проект. При восстановлении проекта в командной строке каталог проекта рассматривается как каталог решения, что может привести к различиям в поведении при восстановлении проекта и решения. |
| User |
Windows: %appdata%\NuGet\NuGet.ConfigMac/Linux: ~/.config/NuGet/NuGet.Config или ~/.nuget/NuGet/NuGet.Config (зависит от инструментов) Дополнительные конфигурации поддерживаются на всех платформах. Эти конфигурации не могут быть изменены инструментом. Виндоус: %appdata%\NuGet\config\*.Config Mac/Linux: ~/.config/NuGet/config/*.config или ~/.nuget/config/*.config |
Параметры применяются ко всем операциям, но переопределяются параметрами уровня решения. |
| Computer |
Windows: %ProgramFiles(x86)%\NuGet\ConfigMac/Linux: /etc/opt/NuGet/Config (Linux) или /Library/Application Support (Mac) по умолчанию. Если $NUGET_COMMON_APPLICATION_DATA не является null и не пустым, то $NUGET_COMMON_APPLICATION_DATA/NuGet/Config иначе |
Параметры применяются ко всем операциям на компьютере, но переопределяются любыми параметрами уровня пользователя или решения. |
Замечание
В Mac/Linux расположение файла конфигурации пользователя зависит от инструментов. В .NET CLI используется ~/.nuget/NuGet папка, а в Mono используется ~/.config/NuGet папка.
В Mac/Linux расположение файла конфигурации на уровне пользователя зависит от инструментов
В Mac/Linux расположение файла конфигурации пользователя зависит от инструментов.
Большинство пользователей используют средства, которые ищут файл конфигурации пользователя в папке ~/.nuget/NuGet .
Эти другие средства ищут файл конфигурации пользователя в папке ~/.config/NuGet :
- Моно
- NuGet.exe
- Visual Studio 2019 для Mac (и более ранних версий)
- Visual Studio 2022 для Mac (и более поздних версий) только при работе с классическими проектами Mono.
Если используемое средство использует оба расположения, рассмотрите возможность их объединения, выполнив следующие действия, чтобы работать только с одним файлом конфигурации уровня пользователя:
- Проверьте содержимое двух файлов конфигурации уровня пользователя и сохраните нужный файл в
~/.nuget/NuGetпапке. - Установите символьную ссылку от
~/.nuget/NuGetк~/.config/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 ".
Параметры управляются с помощью команды конфигурации интерфейса командной строки NuGet:
- По умолчанию изменения вносятся в файл конфигурации уровня пользователя. (В Mac/Linux расположение файла конфигурации уровня пользователя зависит от инструментов)
- Чтобы изменить параметры в другом файле, используйте
-configFileключ. В этом случае файлы могут использовать любое имя файла. - Ключи всегда учитывают регистр.
- Для изменения параметров на уровне компьютера требуется повышение прав доступа.
Предупреждение
Хотя файл можно изменить в любом текстовом редакторе, NuGet (версия 3.4.3 и более поздние версии) автоматически игнорирует весь файл конфигурации, если он содержит неправильный XML -файл (несовпадение тегов, недопустимые кавычки и т. д.). Поэтому предпочтительнее управлять параметрами с помощью nuget config.
Установка значения
Виндоус:
# 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\Bc:\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 файла в следующих расположениях с заданным содержимым. (Файл уровня компьютера не включен в этот пример, но будет вести себя аналогично файлу уровня пользователя.)
Файл A. Файл уровня пользователя (%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>
Файл 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
<?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:
<?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: используется только репозиторий по умолчанию, указанный в файле конфигурации уровня пользователя (A), так как это единственный файл, найденный вdisk_drive_1.Вызывается из
disk_drive_2/илиdisk_drive_/tmp: сначала загружается файл уровня пользователя (A), затем NuGet переходит в корневой каталогdisk_drive_2и находит файл (B). NuGet также ищет файл конфигурации,/tmpно не находит его. В результате используется репозиторийnuget.org, включена функция восстановления пакетов, и пакеты будут распакованы вdisk_drive_2/tmpпо умолчанию.Вызывается из
disk_drive_2/Project1илиdisk_drive_2/Project1/Source: сначала загружается файл уровня пользователя (A), а затем NuGet загружает файл (B) из корневогоdisk_drive_2каталога, потом файл (C). Параметры в (C) переопределяют параметры в (B) и (A), так что пакеты устанавливаются вdisk_drive_2/Project1/External/Packagesвместоdisk_drive_2/tmpприrepositoryPath. Кроме того, поскольку (C) очищает<packageSources>, nuget.org больше недоступен в качестве источника, оставляющего толькоhttps://MyPrivateRepo/ES/nuget.Вызывается из
disk_drive_2/Project2disk_drive_2/Project2/Sourceили: файл уровня пользователя (A) загружается сначала после файла (B) и файла (D). Так какpackageSourcesне очищается, иnuget.org, иhttps://MyPrivateRepo/DQ/nugetдоступны в качестве источников. Пакеты развертываются, как указано вdisk_drive_2/tmp(B).
Дополнительная конфигурация, общая для всех пользователей
Начиная с версии 5.7, NuGet добавил поддержку дополнительных пользовательских конфигурационных файлов. Это позволяет сторонним поставщикам добавлять дополнительные файлы конфигурации пользователей без повышения прав.
Эти файлы конфигурации находятся в папке стандартной конфигурации уровня пользователя в подпапке config .
Все файлы, заканчивающиеся .config или .Config будут считаться.
Эти файлы не могут быть изменены стандартными средствами.
| Платформа ОС | Дополнительные конфигурации |
|---|---|
| Виндоус | %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 Местоположение |
|---|---|
| Виндоус |
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>