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

Восстановление пакетов NuGet восстанавливает все зависимости проекта, перечисленные в файле проекта или файле package.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 на сайте Tools>>Options NuGet диспетчер пакетов> Package Sources.

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

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

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

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

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

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

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

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

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

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

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

Настройте следующие параметры восстановления пакетов в разделе "Параметры>инструментов>" NuGet диспетчер пакетов> General.

Screenshot that shows the NuGet Package Manager options.

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

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

<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+, команда также поддерживает ссылки на пакеты.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 и более поздних версий автоматически восстанавливают пакеты во время сборки, если вы используете шаблон сборки команды 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 диспетчер пакетов> General.
  • В интерфейсе командной строки dotnet используйте dotnet nuget locals all --clear.
  • В интерфейсе командной строки NuGet используйте nuget locals all -clear.

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

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

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

  • Очистка кэша с помощью nuget locals http-cache -clear или dotnet nuget locals http-cache --clear.
  • Временно задайте переменную среды NUGET_HTTP_CACHE_PATH в другую папку.
  • Для nuget restore, используйте -NoHttpCache параметр или для dotnet restoreэтого --no-http-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 и начните сборку. Автоматическое восстановление пакетов должно скачать и установить каждый пакет зависимостей, не добавляя его в управление версиями.

Следующие шаги