Процесс установки пакета NuGet

Попросту говоря, различные средства NuGet обычно создают ссылку на пакет в файле проекта или файле packages.config, а затем восстанавливают пакет, фактически устанавливая его. Исключение составляет команда nuget install, которая только добавляет пакет в папку packages и не меняет какие-либо другие файлы.

Общий процесс заключается в следующем:

  1. (Все средства, кроме nuget.exe.) Записывает идентификатор и версию пакета в файл проекта или файл packages.config.

    Если для установки используется Visual Studio или интерфейс командной строки dotnet, в первую очередь предпринимается попытка установить пакет. Если пакет не является совместимым, он не добавляется в файл проекта или в файл packages.config.

  2. Получает сам пакет:

    • Проверяет, установлен ли пакет (по точному идентификатору и номеру версии) в папке 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.
  3. Сохраняет копию пакета и другие сведения в папке http-cache, как описано в статье Управление глобальными пакетами и папками кэша.

  4. После загрузки устанавливает в папке global-packages пользователя. NuGet создает вложенную папку для каждого идентификатора пакета, а затем создает вложенные папки для каждой установленной версии пакета.

  5. При необходимости NuGet устанавливает зависимые компоненты пакета. Этот процесс может обновить версии пакетов, как описано в статье Принципы разрешения зависимостей пакетов в NuGet.

  6. Обновление других файлов и папок проекта:

    • В проектах, использующих PackageReference, обновляет схему зависимостей пакетов, хранящихся в файле obj/project.assets.json. Само содержимое пакета не копируется в какую-либо папку проекта.
    • Обновляет app.config и (или) web.config, если пакет использует преобразования источника и файла конфигурации.
  7. (Только Visual Studio.) Отображает файл сведений пакета (если он доступен) в окне Visual Studio.

Оцените преимущества в эффективности написания кода с использованием пакетов NuGet!