Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Иногда ссылки на пакеты могут прерываться в Visual Studio проекте. Удаление и переустановка той же версии пакета часто восстанавливает работоспособность ссылок. Обновление пакета, который устанавливает обновленную версию, также может устранить проблему. В этой статье описывается, как переустановить и обновить пакеты NuGet, чтобы устранить сломанные ссылки на пакеты и неработающие проекты.
Замечание
Рекомендации, приведенные в этой статье, относятся только к проектам, используюющим packages.config формат управления. Для PackageReference проектов операция восстановления автоматически исправляет неисправные ссылки.
Распространенные сценарии
Ниже приведены некоторые распространенные сценарии, в которых в проекте Visual Studio может возникнуть сломанная ссылка на пакет.
| Scenario | Description | Резолюция |
|---|---|---|
| Неработаемые ссылки после восстановления пакета | Вы открываете проект Visual Studio и восстанавливаете пакеты NuGet, но неисправные ссылки на пакеты остаются. | Чтобы исправить ссылки, попробуйте переустановить каждый пакет отдельно. |
| Сломанный проект из-за удаленных файлов | Удаленные (отсутствующие) файлы пакетов приводят к разрыву проекта. NuGet не предотвращает удаление элементов, добавленных из пакетов. Легко случайно изменить содержимое, установленное из пакета, и нарушить проект. | Чтобы восстановить проект, попробуйте переустановить затронутые пакеты. |
| Сломанный проект после обновления пакета | Обновление пакета прерывает проект. Сопутствующие обновления пакета зависимостей обычно вызывают этот тип сбоя. | Чтобы восстановить состояние зависимости до предыдущего рабочего порядка, попробуйте переустановить конкретный зависимый пакет. |
| Неработающие ссылки после перенаправления или обновления проекта | Процесс перенастройки или обновления проекта приводит к поврежденным ссылкам на пакеты. После перенацеления проекта NuGet отображает ошибку сборки. Составьте список пакетов, которые могут потребовать переустановки из-за предупреждений о сборке. Или после обновления проекта NuGet отображает ошибку в журнале обновления проекта. В файле журнала перечислены пакеты, которые могут потребоваться переустановить. | Чтобы устранить проблемы из-за изменения целевой платформы, попробуйте переустановить один или несколько пакетов. |
| Изменения пакета в процессе разработки | Авторы пакетов часто должны переустановить ту же версию пакета, которую они в настоящее время разрабатывают для тестирования изменений. | Чтобы переустановить пакет в процессе разработки, используйте команду Update-Package -reinstall в консоли NuGet Package Manager в Visual Studio. Консоль предоставляет гибкие варианты обновления и переустановки пакетов. |
Варианты реализации
У вас есть несколько вариантов обновления и переустановки пакетов NuGet. Распространенные методы включают параметры пользовательского интерфейса NuGet Package Manager, консоль NuGet Package Manager и интерфейс командной строки NuGet (CLI).
Пользовательский интерфейс Package Manager
Помимо консоли Package Manager пользовательский интерфейс Package Manager также предоставляет параметры меню для установки, обновления и удаления пакетов.
Чтобы обновить пакет в пользовательском интерфейсе, перейдите на вкладку "Обновления ", выберите один или несколько пакетов и нажмите кнопку "Обновить".
Чтобы переустановить пакет, сначала удалите пакет и снова установите его:
- Перейдите на вкладку "Установленная" , выберите пакет и запишите его имя, а затем нажмите кнопку "Удалить".
- Перейдите на вкладку "Обзор " и найдите имя пакета, выберите пакет и нажмите кнопку "Установить".
Консоль диспетчера пакетов
Консоль Package Manager можно получить в разделе Tools>NuGet Package Manager>Package Manager Console.
Чтобы обновить пакет, консоль Package Manager предоставляет команду
Update-Package.Чтобы переустановить пакет, можно использовать
Update-Packageкоманду с параметром-reinstall. Этот подход является самым простым вариантом, если он совместим с конфигурацией.
Дополнительные сведения см. в разделах команда Update-Package и переустановка пакетов.
Интерфейс командной строки NuGet
Интерфейс командной строки NuGet nuget.exe — это программа командной строки для Windows, которая предоставляет все возможности NuGet.
Чтобы обновить установленный пакет, выполните следующую команду. Для
<package-configuration-file-path>используйте путь к файлу packages.config.nuget update <package-configuration-file-path>Чтобы переустановить все пакеты NuGet, удалите папку пакетов и выполните следующую команду.
- Для
<package-configuration-file-path>используйте путь к файлу packages.config. - Для
<packages-folder-path>используйте путь к папке пакетов.
nuget install <package-configuration-file-path> -OutputDirectory <packages-folder-path>- Для
Чтобы переустановить один пакет, перейдите в папку пакетов и удалите вложенную папку для этого пакета. Затем выполните следующую команду.
- Для
<ID>используйте идентификатор пакета, который требуется переустановить. - Для
<packages-folder-path>используйте путь к папке пакетов.
nuget install <ID> -OutputDirectory <packages-folder-path>Если вы не используете последнюю версию пакета, выполните следующую команду, чтобы указать используемую версию:
nuget install <ID> -Version <version> -OutputDirectory <packages-folder-path>- Для
Замечание
Эта статья не предоставляет эквивалентную процедуру для 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 в консоли диспетчера пакетов — самый легкий способ переустановить пакет и устранить неисправные ссылки. Однако этот подход не подходит для использования во всех сценариях. Команду можно использовать для обновления установленного пакета, но не для первоначальной установки. Если вы пытаетесь обновить или переустановить пакет, который еще не установлен в конфигурации, команда возвращает ошибку. Прежде чем работать с командой, ознакомьтесь с разделом "Рекомендации по переустановке пакетов ".
Для 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 Solution Explorer.
Следующая команда переустановляет пакет NuGet для определенного проекта в решении.
<package-name> Используйте параметр, чтобы указать имя пакета NuGet для переустановки.
# 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 может добавить атрибут в requireReinstallation файл packages.config проекта. Если NuGet обнаруживает затронутые пакеты во время процесса перенацеления или обновления, он добавляет requireReinstallation="true" атрибут в файл packages.config для всех затронутых ссылок на пакеты. В результате каждая последующая сборка проекта в Visual Studio вызывает предупреждения о сборке для этих пакетов. Предупреждения отображаются как напоминание о переустановке затронутого пакета.
Несовместимость версии зависимостей пакета
Команда Update-Package -reinstall переустановит ту же версию установленного пакета и последнюю версию любых зависимостей. Чтобы устранить проблемы несовместимости версий, можно задать ограничения диапазона версий для управления конфигурацией. NuGet соответствует ограничениям и обновляет зависимости пакета до более новых версий, как это необходимо для устранения проблемы.
Если параметры ограничения вызывают, что зависимость вернется к более ранней версии во время переустановки пакета, можно устранить проблему с помощью команды
Update-Package <dependency-name>. Эта команда переустановит указанную зависимость, не затрагивая зависимый пакет.Можно также использовать команду
Update-Package -reinstall <package-name> -ignoreDependencies. Этот параметр переустановит ту же версию исходного пакета, но не переустановит зависимости. Этот подход при обновлении зависимостей пакета может привести к сбою состояния конфигурации.
Сбой в зависимом пакете
При переустановке определенного пакета все установленные пакеты, зависящие от переустановленного пакета, не обновляются. Версии этих других установленных пакетов остаются прежними. В результате переустановка зависимости может нарушить зависимый пакет.
Связанный контент
- Просмотрите формат
packages.configуправления. - Реализуйте
PackageReferenceв файлах проекта. - Используйте команду Update-Package в консоли NuGet Package Manager в Visual Studio.
- Изучите форматы нотации версий пакетов .