Переустановка и обновление пакетов NuGet в Visual Studio

Иногда ссылки на пакеты могут прерываться в проекте Visual Studio. Удаление и переустановка той же версии пакета часто восстанавливает ссылки на рабочий порядок. Обновление пакета, который устанавливает обновленную версию, также может устранить проблему. В этой статье описывается, как переустановить и обновить пакеты NuGet, чтобы устранить сломанные ссылки на пакеты и неработающие проекты.

Примечание.

Руководство в этой статье относится только к проектам, используюющим формат управления packages.config . Для проектов PackageReference операция восстановления автоматически исправляет неисправные ссылки.

Распространенные сценарии

Ниже приведены некоторые распространенные сценарии, в которых в проекте Visual Studio могут возникнуть сломанные ссылки на пакеты.

Сценарий Описание Решение
Неработаемые ссылки после восстановления пакета Вы открываете проект Visual Studio и восстанавливаете пакеты NuGet, но неисправные ссылки на пакеты остаются. Чтобы исправить ссылки, попробуйте переустановить каждый пакет отдельно.
Сломанный проект из-за удаленных файлов Удаленные (отсутствующие) файлы пакетов приводят к разрыву проекта. NuGet не предотвращает удаление элементов, добавленных из пакетов. Это может быть легко случайно изменить содержимое, установленное из пакета, и разорвать проект. Чтобы восстановить проект, попробуйте переустановить затронутые пакеты.
Сломанный проект после обновления пакета Обновление пакета прерывает проект. Обновления компаньона для пакета зависимостей обычно вызывают этот тип сбоя. Чтобы восстановить состояние зависимости до предыдущего рабочего порядка, попробуйте переустановить конкретный зависимый пакет.
Неработаемые ссылки после перенацелив или обновления проекта Процесс перенацелки или обновления проекта приводит к сломанным ссылкам на пакеты. После перенацеления проекта NuGet отображает ошибку сборки. Пакеты списков предупреждений сборки, которые могут потребоваться переустановить. Или после обновления проекта NuGet отображает ошибку в журнале обновления проекта. В файле журнала перечислены пакеты, которые могут потребоваться переустановить. Чтобы устранить проблемы из-за изменения целевой платформы, попробуйте переустановить один или несколько пакетов.
Изменения пакета при разработке Авторы пакетов часто должны переустановить ту же версию пакета, которую они в настоящее время разрабатывают для тестирования изменений. Консоль NuGet диспетчер пакетов в Visual Studio предоставляет гибкие возможности обновления и переустановки пакетов. Чтобы переустановить пакет в процессе разработки, можно использовать Update-Package -reinstall команду.

Варианты реализации

У вас есть несколько вариантов обновления и переустановки пакетов NuGet. Распространенные методы включают параметры пользовательского интерфейса NuGet диспетчер пакетов, консоль NuGet диспетчер пакетов и интерфейс командной строки NuGet (интерфейс командной строки).

Пользовательский интерфейс диспетчера пакетов

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

  • Чтобы обновить пакет, откройте вкладку Обновления, выберите один или несколько пакетов, а затем нажмите кнопку "Обновить".

  • Чтобы переустановить пакет, сначала удалите пакет и снова установите его. Откройте вкладку "Установленная" , выберите пакет и запишите его имя, а затем нажмите кнопку "Удалить". Перейдите на вкладку "Обзор " и найдите имя пакета, выберите пакет, а затем нажмите кнопку "Установить".

Консоль диспетчера пакетов

Вы можете получить доступ к консоли диспетчер пакетов в разделе "Инструменты>NuGet диспетчер пакетов> диспетчер пакетов консоли".

  • Чтобы обновить пакет, консоль диспетчер пакетов предоставляет Update-Package команду.

  • Чтобы переустановить пакет, можно использовать ту же команду с параметром -reinstall . Этот подход является самым простым вариантом, если он совместим с конфигурацией.

Дополнительные сведения см. в разделах "Команды update-Package" и "Переустановка пакетов".

NuGet CLI

Интерфейс командной nuget.exeстроки NuGet — это программа командной строки для Windows, которая предоставляет все возможности NuGet.

  • Чтобы обновить установленный пакет, выполните nuget update команду.

  • Чтобы переустановить все пакеты NuGet, удалите папку nuget install пакета и выполните команду.

  • Чтобы переустановить один пакет, удалите папку пакета и выполните nuget install <id> команду, где <id> аргумент является идентификатором конкретного пакета.

Примечание.

Для dotnet CLI эквивалентная процедура не требуется. При выполнении dotnet restore команды dotnet CLI использует NuGet для определения зависимостей и скачивания всех необходимых пакетов NuGet. Дополнительные сведения см. в статье "Восстановление пакетов NuGet с помощью dotnet CLI".

Ограничения на версии обновления

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

Предположим, что приложение работает только с пакетом версии 1.x, но не с версией 2.0 или более поздней, из-за серьезного изменения в API пакета. Чтобы убедиться, что приложение работает должным образом, необходимо ограничить обновление пакетов NuGet только до версий 1.x. Это ограничение помогает предотвратить случайные обновления, которые могут нарушить приложение.

Чтобы задать ограничение, откройте packages.config файл в текстовом редакторе. Найдите зависимость, которую вы хотите ограничить, и добавьте allowedVersions атрибут с требуемым диапазоном версий.

В следующем примере показано, как ограничить обновления до версии 1.x, задав атрибут следующим allowedVersions[1,2)образом:

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="ExamplePackage" version="1.1.0" allowedVersions="[1,2)" />

    <!-- ... -->
</packages>

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

Команда Update-Package

Команда Update-Package в консоли диспетчер пакетов — самый простой способ переустановить пакет и адрес неисправных ссылок. Однако этот подход не подходит для использования во всех сценариях. Команду можно использовать для обновления установленного пакета, но не для первоначальной установки. Если вы пытаетесь обновить или переустановить пакет, который еще не установлен в конфигурации, команда возвращает ошибку. Прежде чем работать с командой, ознакомьтесь с разделом о переустановке пакета.

Обновление пакетов в проекте или решении с помощью PackageReference всегда обновляется до последней версии пакета (за исключением пакетов предварительной версии). Проекты, использующие packages.config формат управления, могут ограничить версии обновления, как описано в разделе "Ограничения для версий обновления".

В следующих разделах приведены примеры работы с командой.

Переустановка параметров пакета

Ниже приведено базовое использование команды для переустановки. Чтобы определить конкретный пакет NuGet, можно использовать необязательный -Id параметр.

# Reinstall the package named <package_name>
Update-Package -Id <package_name> –reinstall

Update-Package С помощью команды проще удалить пакет, а затем попытаться найти тот же пакет в коллекции NuGet с той же версией.

Обновление параметров пакета

Эта же команда без -reinstall параметра обновляет пакет до более новой версии, если применимо. Команда возвращает ошибку, если указанный пакет еще не установлен в проекте.

# Update the package named <package_name>
Update-Package <package_name>

Параметры проекта и решения

По умолчанию Update-Package команда влияет на все проекты в решении. Чтобы ограничить действие определенным проектом, используйте -ProjectName параметр. Укажите имя проекта, как оно отображается в Обозреватель решений Visual Studio.

Следующая команда переустановляет пакет NuGet для определенного проекта в решении. Имя определенного пакета NuGet для переустановки указывается в параметре <package_name> .

# Reinstall the package named <package_name> in MyProject only
Update-Package <package_name> -ProjectName MyProject -reinstall

Если вы хотите переустановить все пакеты в проекте, используйте -ProjectName параметр, не указывая какой-либо конкретный пакет. Этот же подход можно выполнить для обновления пакетов в проекте, как показано в этом примере:

# Update all packages in MyProject only
Update-Package -ProjectName MyProject

Чтобы обновить все пакеты в решении, просто используйте Update-Package команду без других аргументов или параметров.

Внимание

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

# Update all packages in all projects in the solution
Update-Package 

Рекомендации по переустановке пакетов

Если вы планируете использовать Update-Package команду для переустановки пакетов, ознакомьтесь со следующими рекомендациями, чтобы обеспечить совместимость с вашим сценарием конфигурации.

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

Пакет не поддерживает целевую платформу проекта

При перенацелив целевую платформу проекта, один или несколько пакетов могут не поддерживать новую целевую конфигурацию.

Обычно переустановка пакета с Update-Package –reinstall <package_name> помощью команды работает. Пакет, установленный для старой целевой платформы, удаляется и тот же пакет устанавливается в новую целевую платформу проекта.

В некоторых случаях пакет может не поддерживать новую целевую платформу. Ниже приведены некоторые проблемы, которые могут возникнуть:

  • Если пакет поддерживает переносимые библиотеки классов (PCLs) и перенацеливаете проект на сочетание платформ, которые больше не поддерживаются пакетом, ссылки на пакет могут быть отсутствуют после переустановки.

  • Эта проблема может быть связана с пакетами, которые вы используете непосредственно или для пакетов, установленных в качестве зависимостей. Любой пакет, который вы используете напрямую, может поддерживать новую целевую платформу, пока их зависимости не поддерживаются.

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

атрибут requireReinstallation, равный true

После перенацеливания целевой платформы проекта или обновления пакетов NuGet NuGet может добавить атрибут в requireReinstallationpackages.config файл проекта. Если NuGet обнаруживает затронутые пакеты во время процесса перенацеления или обновления, он добавляет requireReinstallation="true" атрибут в packages.config файл для всех затронутых ссылок на пакеты. В результате каждая последующая сборка проекта в Visual Studio вызывает предупреждения о сборке для этих пакетов. Предупреждения отображаются как напоминание о переустановке затронутого пакета.

Несовместимость версии зависимостей пакета

Команда Update-Package –reinstall переустановит ту же версию установленного пакета и последнюю версию любых зависимостей. Чтобы устранить проблемы несовместимости версий, можно задать ограничения диапазона версий для управления конфигурацией. NuGet соответствует ограничениям и обновляет зависимости пакета до более новых версий, как это необходимо для устранения проблемы.

  • Если параметры ограничения вызывают зависимость отменить изменения более ранней версии во время переустановки пакета, можно устранить проблему с командойUpdate-Package <dependency_name>. Эта команда переустановит указанную зависимость, не затрагивая зависимый пакет.

  • Можно также использовать команду Update-Package –reinstall <packageName> -ignoreDependencies. Этот параметр переустановит ту же версию исходного пакета, но не переустановит зависимости. Используйте этот подход при обновлении зависимостей пакета, что может привести к сбою состояния конфигурации.

Неработает зависимый пакет

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