Поделиться через


Предупреждение NuGet NU1605

Пример 1

Обнаружено понижение уровня пакета: PackageB с 4.0.0 до 3.5.0. Наведите ссылку на пакет непосредственно из проекта, чтобы выбрать другую версию.
    Project —> PackageA 4.0.0 —> PackageB (>= 4.0.0)
    Project —> PackageB (>= 3.5.0)

Проблема

Пакет зависимостей указал ограничение версии на более высокую версию пакета, чем восстановление в конечном счете разрешено. Это связано с правилом direct-dependency-wins - при разрешении пакетов прямая версия пакета в подграфе переопределяет, что удаленные пакеты с тем же идентификатором.

Решение

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

В приведенном выше примере вы измените ссылку на пакет на PackageB 4.0.0:

PackageA 4.0.0 —> PackageB 4.0.0
PackageB 4.0.0

Пример 2

Обнаружена понижение уровня пакета: PackageC с 2.0.0 до 1.1.0. Наведите ссылку на пакет непосредственно из проекта, чтобы выбрать другую версию.
    Project —> PackageA 1.0.0 —> PackageB 2.0.0 ->'PackageC' (>= 2.0.0)
    Project —> PackageA 1.0.0 —> PackageC (>= 1.1.0)

Проблема

Пакет зависимостей указал ограничение версии на более высокую версию пакета, чем восстановление в конечном счете разрешено. Это связано с правилом direct-dependency-wins - при разрешении пакетов NuGet пытается учитывать намерение автора пакета. Автор PackageA явно снизился до PackageC 1.1.0 с PackageC 2.0.0.

Решение

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

В приведенном выше примере вы измените ссылку на пакет на PackageC 2.0.0:

PackageA 4.0.0 —> PackageB 4.0.0
PackageB 4.0.0

Пример 3

Обнаружена пониженная версия пакета: System.IO.FileSystem.Primitives с 4.3.0 до 4.0.1. Наведите ссылку на пакет непосредственно из проекта, чтобы выбрать другую версию.
Проект — System.IO.FileSystem 4.0.1 — runtime.win.System.IO.FileSystem 4.3.0> — System.IO.FileSystem.Primitives (= 4.3.0) — System.IO.FileSystem 4.0.1 —>> System.IO.FileSystem.Primitives (>>= 4.0.1)
>>

Проблема

Некоторые сочетания пакетов, которые поставляется с .NET Core 1.0 и 1.1, несовместимы друг с другом, если они ссылаются вместе в проекте .NET Core 3.0 или более поздней версии, а также указан идентификатор RuntimeIdentifier. Проблемные пакеты обычно начинаются с System. или Microsoft.имеют номера версий от 4.0.0 до 4.3.1. В этом случае сообщение вниз будет иметь пакет, начиная с runtime.<RID> цепочки зависимостей.

Решение

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

<PackageReference Include="Microsoft.NETCore.Targets" Version="3.0.0" PrivateAssets="all" />

Вы можете использовать version соответствующую основную версию пакета SDK.

Пример 4

Обнаружена понижение уровня пакета: Microsoft.NETCore.App с 2.1.8 до 2.1.0. Наведите ссылку на пакет непосредственно из проекта, чтобы выбрать другую версию.
    test - mvc ->> Microsoft.NETCore.App (>= 2.1.8)
    test —> Microsoft.NETCore.App (>= 2.1.0)

Проблема

Проект mvc указал ограничение версии для более высокой версии пакета, чем восстановление в конечном счете разрешено. Это связано с правилом direct-dependency-wins - при разрешении пакетов, версия непосредственно на который ссылается пакет в графе, переопределит удаленный пакет с тем же идентификатором.

Решение

Эта конкретная ошибка (с пакетом Microsoft.NETCore.App) улучшена путем перемещения пакета SDK для .NET Core на 2.2.100 или более поздней версии. Microsoft.NETCore.App — это автоматически ссылающийся пакет, на который пакет SDK для .NET Core до версии 3.0.100 выбирает автоматический перенос. Дополнительные сведения см. в разделе "Локальный перенос среды выполнения развертывания".

Примечание.

Хотя NU1605 считается предупреждением средства NuGet, пакет SDK для .NET будет рассматривать это предупреждение как ошибку WarningsAsErrors. Проект может обновить это предупреждение до ошибки, установив значение TreatWarningsAsErrors true. Хотя это не рекомендуется, так как вы, скорее всего, столкнулись с проблемами среды выполнения, вы можете отключить это предупреждение.

Совет

Альтернативное решение: NuGetSolver — это расширение Visual Studio, разработанное Microsoft DevLabs, предназначенное для устранения конфликтов зависимостей. Он автоматизирует процесс выявления и решения этих проблем. Дополнительные сведения см. на странице NuGetSolver в Visual Studio Marketplace, и мы хотели бы услышать отзывы о вашем опыте.