Восстановление пакетов с помощью восстановления пакетов NuGet

Восстановление пакетов NuGet восстанавливает все зависимости проекта, перечисленные в файле проекта или файлеpackages.config . Пакеты можно восстановить вручную с nuget restoreпомощью , dotnet restoremsbuild -t:restoreили с помощью Visual Studio. Команды dotnet build и dotnet run команды автоматически восстанавливают пакеты и можно настроить Visual Studio для автоматического восстановления пакетов при сборке проекта.

Для повышения уровня более чистой среды разработки и уменьшения размера репозитория восстановление пакетов делает все зависимости проекта доступными без необходимости хранить их в системе управления версиями. Сведения о настройке репозитория системы управления версиями для исключения двоичных файлов пакетов см. в статье "Пакеты" и "Система управления версиями".

Поведение восстановления пакетов

Восстановление пакетов пытается установить все зависимости пакета в состояние, соответствующее <PackageReference>s в файле проекта, например CSPROJ или <package>s в файлеpackages.config . Функция восстановления пакетов сначала устанавливает необходимые прямые зависимости проекта, а затем остальные зависимости этих пакетов во всей схеме зависимостей.

Если необходимый пакет еще не установлен, NuGet сначала пытается получить его из локальных глобальных пакетов или папок кэша HTTP. Если пакет отсутствует в локальных папках, NuGet пытается скачать его из всех источников, настроенных в Visual Studio в>>параметрах диспетчера пакетов>NuGet.

Во время восстановления NuGet игнорирует порядок источников пакетов и использует пакет из первого источника, который отвечает на запросы. Если восстановление завершается сбоем, NuGet не указывает на сбой до тех пор, пока не будет выполнена проверка всех источников. Затем NuGet сообщает об ошибке только для последнего источника в списке. Ошибка подразумевает, что пакет не был представлен ни в одном из источников, даже если он не перечисляет другие сбои по отдельности.

Дополнительные сведения о поведении NuGet см. в общих конфигурациях NuGet.

Восстановление пакетов

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

После успешного восстановления:

  • Для проектов, использующих <PackageReference>, пакет присутствует в локальной папке глобальных пакетов , а файл project obj/project.assets.json создается повторно.
  • Для проектов, использующих packages.config, пакет появится в папке пакетов проекта.
  • Теперь сборка проекта должна пройти без ошибок.

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

Если после запуска восстановления пакетов отсутствуют пакеты или связанные с пакетом ошибки, например значки ошибок в Обозреватель решений, следуйте инструкциям в разделе "Устранение ошибок восстановления пакетов", переустановите или обновите пакеты. В Visual Studio консоль диспетчера пакетов предоставляет несколько вариантов переустановки пакетов. Дополнительные сведения см. в разделе "Использование package-Update".

Восстановление пакетов в Visual Studio

В Visual Studio в Windows пакеты можно восстановить автоматически или вручную. Сначала настройте восстановление пакетов с помощьюдиспетчера пакетов NuGetпараметров>инструментов>.

Настройка параметров восстановления пакетов Visual Studio

Настройте следующие параметры восстановления пакетов на сайте Tools>Options>NuGet Package Manager>General.

Снимок экрана: параметры диспетчера пакетов NuGet.

Разрешить NuGet скачивать отсутствующие пакеты

Выберите Разрешить NuGet скачивать отсутствующие пакеты , чтобы включить восстановление пакетов и команду "Восстановить пакеты NuGet ". Этот выбор задает packageRestore/enabled параметр True в разделе packageRestore глобального файлаNuGet.Config в папке %AppData%\Roaming\NuGet в Windows или ~/.nuget/NuGet/ на Mac или Linux.

<configuration>
    <packageRestore>
        <add key="enabled" value="True" />
    </packageRestore>
</configuration>

Примечание

Чтобы глобально переопределить packageRestore/enabled параметр, можно задать для переменной среды EnableNuGetPackageRestore значение True или False перед открытием Visual Studio или запуском сборки.

Чтобы включить или отключить восстановление пакетов для всех пользователей на компьютере, можно добавить параметры конфигурации в глобальный файл NuGet.Config в Windows в папке %ProgramData%\NuGet\Config, иногда в определенной <папке IDE>\Version>\<<SKU> Visual Studio или в Mac/Linux по адресу ~/.local/share. После этого отдельные пользователи могут выборочно включить восстановление на уровне проекта по необходимости. Дополнительные сведения о том, как NuGet устанавливает приоритеты для нескольких файлов конфигурации, см. в статье Распространенные конфигурации NuGet.

Важно!

Если изменить packageRestore параметры в NuGet.Config напрямую, перезапустите Visual Studio, чтобы параметры отображали текущие значения.

Автоматическая проверка отсутствующих пакетов во время сборки

Установите флажок "Автоматически проверять отсутствующие пакеты во время сборки в Visual Studio ", чтобы автоматически восстановить все отсутствующие пакеты при запуске сборки из Visual Studio. Этот параметр не влияет на сборки, выполняемые из командной строки MSBuild. Этот параметр задает packageRestore/automatic значение True в packageRestore разделе файлаNuGet.Config .

<configuration>
    <packageRestore>
        <add key="automatic" value="True" />
    </packageRestore>
</configuration>

Для проектов, не относящихся к пакету SDK, необходимо выбрать разрешить NuGet скачивать отсутствующие пакеты , а также автоматически проверять отсутствующие пакеты во время сборки в Visual Studio впараметрах , чтобы включить автоматическое восстановление.

Выбор формата управления пакетами по умолчанию

NuGet имеет два формата управления пакетами: PackageReference и packages.config. Выберите формат, который вы хотите использовать, в раскрывающемся списке в разделе "Управление пакетами". Вы также можете выбрать, следует ли разрешать выбор формата при первой установке пакета.

Примечание

  • Если проект не поддерживает оба формата управления пакетами, NuGet использует формат управления пакетами, совместимый с проектом, который может не быть заданным по умолчанию в параметрах. После этого NuGet не будет запрашивать выбор при первой установке, даже если вы выбрали этот параметр.

  • Если вы используете консоль диспетчера пакетов для установки первого пакета в проекте, NuGet не запрашивает выбор формата, даже если этот параметр выбран в разделе "Параметры".

Восстановление пакетов вручную или автоматически

После включения восстановления пакетов в параметрах можно щелкнуть решение правой кнопкой мыши в Обозреватель решений и выбрать команду "Восстановить пакеты NuGet" для восстановления пакетов в любое время.

Если вы включили автоматическое восстановление в параметрах, восстановление пакетов происходит автоматически при создании проекта из шаблона или сборки проекта. Для NuGet 4.0 и более поздних версий восстановление также происходит автоматически при внесении изменений в проект в стиле пакета SDK.

Для проектов, которые используются<PackageReference>, можно просмотреть ссылки на пакеты в Visual Studio Обозреватель решений в разделе"Пакетызависимостей>". Пакеты, которые не устанавливаются должным образом при ручном восстановлении или запуске значков ошибок сборки в Обозреватель решений. Щелкните проект правой кнопкой мыши, выберите "Управление пакетами NuGet" и используйте диспетчер пакетов NuGet для удаления и переустановки затронутых пакетов. Дополнительные сведения см. в разделе "Переустановка и обновление пакетов".

Если отображается ошибка, возникающая в этом проекте, ссылается на пакеты NuGet, отсутствующие на этом компьютере, или необходимо восстановить один или несколько пакетов NuGet, но не удалось, так как согласие не было предоставлено, убедитесь, что вы включили автоматическое восстановление. Для более старых проектов см. раздел "Миграция на автоматическое восстановление пакетов". См. также сведения об устранении ошибок восстановления пакета.

Восстановление с помощью dotnet CLI

Команда dotnet restore восстанавливает пакеты, с которыми перечисляется <PackageReference>файл проекта. Дополнительные сведения см. в разделе PackageReference в файлах проекта.

.NET Core 2.0 и более поздних версий dotnet build и dotnet run команды автоматически восстанавливают пакеты. По состоянию на NuGet 4.0 выполняется тот же код, dotnet restore что и nuget restore.

Восстановление пакета с помощью dotnet restore:

  1. Откройте командную строку и перейдите в каталог, в котором находится файл проекта.
  2. Запустите dotnet restore.

Важно!

Чтобы добавить недостающую ссылку на пакет в файл проекта, используйте пакет dotnet add, который также запускается restore.

Восстановление с помощью интерфейса командной строки NuGet

Команда восстановления Интерфейса командной строки NuGet скачивает и устанавливает отсутствующие пакеты. Команда работает над проектами, которые используют PackageReference или packages.config для ссылок на пакеты.

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

Чтобы восстановить пакеты, выполните следующую команду:

nuget restore <projectPath>

Команда restore использует файл решения или файлpackage.config в указанном пути проекта.

Например, чтобы восстановить все пакеты для MySolution.sln в текущем каталоге, выполните следующую команду:

nuget restore MySolution.sln

Примечание

Для проектов, не PackageReferenceиспользующих пакет SDK, используйте msbuild -t:restore для восстановления пакетов.

Восстановление с помощью MSBuild

Вы можете использовать msbuild -t:restore для восстановления пакетов в NuGet 4.x+ и MSBuild 15.1+, которые входят в состав Visual Studio 2017 и более поздних версий.

Эта команда восстанавливает пакеты в проектах, использующих PackageReference для ссылок на пакеты. Начиная с MSBuild 16.5+, команда также поддерживает ссылки на пакетыpackages.config при использовании -p:RestorePackagesConfig=true.

Чтобы использовать восстановление MSBuild, выполните приведенные далее действия.

  1. Откройте командную строку разработчика, найдите командную строку разработчика и запустите командную строку из меню "Пуск " Windows, которая настраивает все необходимые пути для MSBuild.

  2. Перейдите в папку проекта и введите msbuild -t:restore.

  3. После завершения восстановления введите msbuild , чтобы перестроить проект. Убедитесь, что выходные данные MSBuild указывают на успешное завершение сборки.

Примечание

Вы можете использовать для msbuild -restore запуска restore, перезагрузки проекта и сборки, так как сборка является целевым объектом по умолчанию. Дополнительные сведения см. в разделе "Восстановление и сборка" с помощью одной команды MSBuild.

Восстановление с помощью Azure Pipelines или Azure DevOps Server

При создании определения сборки в Azure Pipelines можно включить задачу восстановления NuGet CLI или dotnet CLI в определение перед любыми задачами сборки. В некоторые шаблоны сборки задача восстановления включена по умолчанию.

Azure DevOps Server и TFS 2013 и более поздних версий автоматически восстанавливают пакеты во время сборки, если используется шаблон team Build TFS 2013 или более поздней версии. Вы также можете включить шаг сборки для запуска параметра восстановления командной строки или при необходимости перенести шаблон сборки в более позднюю версию. Дополнительные сведения см. в статье Настройка восстановления пакетов с помощью сборки Team Foundation.

Ограничение версий пакетов

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

  • В packages.configможно указать allowedVersions диапазон в зависимости. Дополнительные сведения см. в разделе "Ограничение версий обновления". Пример:

    <package id="Newtonsoft.json" version="6.0.4" allowedVersions="[6,7)" />
    
  • В файле проекта можно указать диапазон версий в Version свойстве зависимости. Пример:

    <PackageReference Include="Newtonsoft.json" Version="[6,7)" />
    

В обоих случаях используйте нотацию, описанную в разделе "Управление версиями пакетов".

Принудительное восстановление из удаленных источников пакетов

По умолчанию операции восстановления NuGet используют пакеты из локальных глобальных пакетов и папок http-cache , как описано в разделе "Управление глобальными пакетами и папками кэша". Чтобы избежать использования этих локальных пакетов, используйте следующие параметры.

Чтобы очистить все локальные кэши, выполните приведенные далее действия.

  • В Visual Studio нажмите кнопку "Очистить все кэши NuGet" в разделе >"Параметрыдиспетчера пакетов NuGet"в разделе "Параметры>" диспетчера> пакетов NuGet.
  • В интерфейсе командной строки dotnet используйте dotnet nuget locals all --clear.
  • В интерфейсе командной строки NuGet используйте nuget locals all -clear.

Чтобы избежать использования пакетов в папке global-packages, выполните следующие действия .

  • Очистите папку с помощью nuget locals global-packages -clear или dotnet nuget locals global-packages --clear.
  • Временно задайте для переменной среды NUGET_PACKAGES другую папку.
  • Создайте файлNuGet.Config, который задает globalPackagesFolderPackageReferenceзначение для packages.configили repositoryPath в другую папку. Дополнительные сведения см. в статье, посвященной параметрам конфигурации.
  • Только для MSBuild укажите другую папку со свойством RestorePackagesPath .

Чтобы избежать использования пакетов в кэше HTTP, выполните следующие действия.

  • Очистите кэш с помощью nuget locals http-cache -clear или dotnet nuget locals http-cache --clear.
  • Временно задайте для переменной среды NUGET_HTTP_CACHE_PATH другую папку.
  • Для nuget restore, используйте -NoCache параметр или для dotnet restoreпараметра --no-cache . Эти параметры не влияют на операции восстановления с помощью диспетчера пакетов Или консоли Visual Studio.

Переход на автоматическое восстановление пакетов

Более ранние версии NuGet поддерживали восстановление пакета, интегрированного с MSBuild. Проекты, использующие нерекомендуемое восстановление пакетов, интегрированного с MSBuild, должны переноситься на автоматическое восстановление пакетов.

Эти проекты обычно содержат папку NUGET с тремя файлами: NuGet.config, nuget.exeи NuGet.targets. Файл NuGet.targets заставляет NuGet использовать интегрированный с MSBuild подход, поэтому его необходимо удалить.

Переход на автоматическое восстановление пакетов:

  1. Включите автоматическое восстановление пакетов.
  2. Закройте Visual Studio.
  3. Удалите .nuget/nuget.exe и .nuget/NuGet.targets.
  4. Для каждого файла проекта удалите <RestorePackages> элемент и удалите все ссылки на NuGet.targets.

Чтобы протестировать автоматическое восстановление пакетов, выполните приведенные далее действия.

  1. Удалите папку из решения папку packages.
  2. Откройте решение в среде Visual Studio и начните сборку. Автоматическое восстановление пакетов должно загружать и устанавливать каждый пакет зависимостей, не добавляя его в управление версиями.

Дальнейшие действия