Процесс установки пакета NuGet
Попросту говоря, различные средства NuGet обычно создают ссылку на пакет в файле проекта или файле packages.config
, а затем восстанавливают пакет, фактически устанавливая его. Исключение составляет команда nuget install
, которая только добавляет пакет в папку packages
и не меняет какие-либо другие файлы.
Общий процесс заключается в следующем:
(Все средства, кроме
nuget.exe
.) Записывает идентификатор и версию пакета в файл проекта или файлpackages.config
.Если для установки используется Visual Studio или интерфейс командной строки dotnet, в первую очередь предпринимается попытка установить пакет. Если пакет не является совместимым, он не добавляется в файл проекта или в файл
packages.config
.Получает сам пакет:
Проверяет, установлен ли пакет (по точному идентификатору и номеру версии) в папке global-packages, как описано в статье Управление папкой установки глобальных пакетов, кэшем и временными папками.
Если пакета нет в папке global-packages, выполняется попытка извлечь пакет из источников, перечисленных в файлах конфигурации. На этом этапе применяются конфигурации сопоставления источников пакетов. Если источники сетевые, выполняется попытка извлечь пакет из кэша HTTP, когда не указан параметр
-NoHttpCache
с помощью командыnuget.exe
или параметр--no-http-cache
с помощью командыdotnet restore
. (Visual Studio иdotnet add package
всегда используйте кэш.) Если пакет используется из кэша, в выходных данных появится элемент CACHE. Срок действия кэша составляет 30 минут.Если пакет был указан с использованием групповой версии или без минимальной версии, NuGet должен будет связаться со всеми источниками, чтобы найти наилучшее соответствие. Пример:
1.*
,(, 2.0.0]
.Если пакета нет в кэше HTTP, выполняется попытка скачать его из источников, перечисленных в файлах конфигурации. После скачивания пакета в выходных данных отображается параметр GET и ОК. NuGet ведет журнал трафика HTTP с обычным уровнем детализации.
Если пакет не удается извлечь из любых источников, на этом этапе установка завершится ошибкой, например NU1103. Обратите внимание, что в выходных данных ошибок выполнения команд
nuget.exe
отображается только последний проверенный источник, но подразумевается, что пакет отсутствует во всех.
При извлечении пакета с помощью NuGet источники проверяются в таком порядке:
- NuGet проверяет папку локальных источников и сетевые папки, а затем источники HTTP.
Сохраняет копию пакета и другие сведения в папке http-cache, как описано в статье Управление глобальными пакетами и папками кэша.
После загрузки устанавливает в папке global-packages пользователя. NuGet создает вложенную папку для каждого идентификатора пакета, а затем создает вложенные папки для каждой установленной версии пакета.
При необходимости NuGet устанавливает зависимые компоненты пакета. Этот процесс может обновить версии пакетов, как описано в статье Принципы разрешения зависимостей пакетов в NuGet.
Обновление других файлов и папок проекта:
- В проектах, использующих PackageReference, обновляет схему зависимостей пакетов, хранящихся в файле
obj/project.assets.json
. Само содержимое пакета не копируется в какую-либо папку проекта. - Обновляет
app.config
и (или)web.config
, если пакет использует преобразования источника и файла конфигурации.
- В проектах, использующих PackageReference, обновляет схему зависимостей пакетов, хранящихся в файле
(Только Visual Studio.) Отображает файл сведений пакета (если он доступен) в окне Visual Studio.
Оцените преимущества в эффективности написания кода с использованием пакетов NuGet!