Ошибка NU1605 Обнаруженное понижение пакета
В моем консольном приложении netcoreapp2.0 возникают следующие ошибки зависимости NU1605:
NU1605 Detected package downgrade: System.Diagnostics.Debug from 4.3.0 to 4.0.11. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Diagnostics.Debug (>= 4.3.0)
MyProject -> System.Diagnostics.Debug (>= 4.0.11)
NU1605 Detected package downgrade: System.Runtime.Extensions from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Runtime.Extensions (>= 4.3.0)
MyProject -> Colorful.Console 1.2.6 -> System.Runtime.Extensions (>= 4.1.0) MyProject
NU1605 Detected package downgrade: System.Runtime.Handles from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Runtime.Handles (>= 4.3.0)
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> System.Runtime.Handles (>= 4.0.1)
NU1605 Detected package downgrade: System.Runtime.InteropServices from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.Console 4.0.0 -> runtime.win.System.Console 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0)
MyProject -> Colorful.Console 1.2.6 -> System.Runtime.InteropServices (>= 4.1.0)
Я пытался ссылаться на эти версии пакета в csproj, но это не решает проблему. Смотрите csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Colorful.Console" Version="1.2.6" />
<PackageReference Include="CommandLineParser" Version="2.2.1" />
<PackageReference Include="DotSpinners" Version="1.2.0" />
<PackageReference Include="System.Diagnostics.Debug" Version="4.0.11" />
<PackageReference Include="System.Runtime.Extensions" Version="4.1.0" />
<PackageReference Include="System.Runtime.Handles" Version="4.0.1" />
<PackageReference Include="System.Runtime.InteropServices" Version="4.1.0" />
</ItemGroup>
</Project>
И они, кажется, восстановить нормально
Проект также ссылается на Microsoft.NETCore.App 2.0 SDK.
Выполняя восстановление dotnet из CLI, я также получаю следующую ошибку, которая, я не уверен, связана:
C:\Program Files\dotnet\sdk\2.1.200\NuGet.targets(114,5): error : Failed to retrieve information about 'System.Runtime.Serialization.Formatters' from remote source 'https://mycompany.pkgs.visualstudio.com/_packaging/myid/nuget/v3/flat2/system.runtime.serialization.formatters/index.json'. [C:\MyProject\MyProject.sln]
C:\Program Files\dotnet\sdk\2.1.200\NuGet.targets(114,5): error : Response status code does not indicate success: 401 (Unauthorized). [C:\MyProject\MyProject.sln]
Я понятия не имею, почему он пытается получить информацию о System.Runtime.Serialization.Formatters из репозитория пакетов нашей частной компании.
NuGet.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="mycompany" value="https://mycompany.pkgs.visualstudio.com/_packaging/Stable/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<mycompany>
<add key="Username" value="vsts" />
<add key="ClearTextPassword" value="xxx" />
</mycompany>
</packageSourceCredentials>
<disabledPackageSources>
<add key="Microsoft and .NET" value="true" />
</disabledPackageSources>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<bindingRedirects>
<add key="skip" value="False" />
</bindingRedirects>
<packageManagement>
<add key="format" value="0" />
<add key="disabled" value="False" />
</packageManagement>
</configuration>
У меня также есть следующее предупреждение NU1603, если это что-то значит:
NU1603 MyProject depends on System.Runtime.Handles (>= 4.1.0) but System.Runtime.Handles 4.1.0 was not found. An approximate best match of System.Runtime.Handles 4.3.0 was resolved.
Ответы
Ответ 1
Ошибка NU1605 Обнаружено понижение пакета
Для ошибки NU1605:
Вы можете использовать <NoWarn>NU1605</NoWarn>
чтобы очистить <NoWarn>NU1605</NoWarn>
WarningsAsErrors
в вашем проекте.
Это потому, netcoreapp2.0
проекты <WarningsAsErrors>NU1605</WarningsAsErrors>
по умолчанию имеют <WarningsAsErrors>NU1605</WarningsAsErrors>
. Проверьте это из Properties-> Build-> Обрабатывать предупреждение как ошибки:
Добавить как следующее:
<PackageReference Include="Colorful.Console" Version="1.2.6">
<NoWarn>NU1605</NoWarn>
</PackageReference>
Посмотрите сообщение в блоге здесь: интеграция MSBuild с предупреждениями и ошибками NuGet и неожиданными предупреждениями о версии пакета.
Для ошибки NU1603:
Предупреждение возникает из-за того, что System.Runtime.Handles
(> = 4.1.0) не существует в ленте. Обычно это ошибка создания пакета, потому что пакет зависит от того, чего не существует.
Вы также можете использовать <NoWarn>NU1603</NoWarn>
для решения этой проблемы:
<PackageReference>
<NoWarn>NU1603</NoWarn>
</PackageReference>
Примечание. Вы могли бы заметить, что у вашего проекта есть еще одно предупреждение, обратите внимание на эмблему желтого треугольника на PackageReference DotSpinners
на Reference. Это потому, что пакет DotSpinners
- это проект .NET Framework, несовместимый с вашим проектом .NET Core.
Надеюсь это поможет.
Ответ 2
Убедитесь, что вы используете одну и ту же версию для сборки и публикации, вы можете исправить это, добавив 2.1.9 в файл .csproj в PropertyGroup, это должно соответствовать вашей текущей версии настроек. Пример:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.9</RuntimeFrameworkVersion>
</PropertyGroup>
Ошибка, которую я получил: NETSDK1061: проект был восстановлен с использованием Microsoft.NETCore.App версии 2.1.9, но с текущими настройками вместо него будет использоваться версия 2.1.0.
Ответ 3
У меня была похожая проблема с консольным приложением .netcoreapp2.2.
Проект строился успешно. Однако публикация не удалась с несколькими ошибками NU1605.
Проблема возникла из log4net версии 2.0.8. На него ссылались в проекте .netstandard2.0 со следующими зависимостями:
Они вызывали понижение пакетов в проектах, ссылающихся на log4net. И во время публикации эти предупреждения рассматриваются как ошибки...
Чтобы решить эту проблему, я добавил правильные версии этих библиотек через Nuget.
Наконец, публикация прошла успешно.
P.S. Когда я впервые добавил пакеты с самой новой версией библиотек, в списке зависимостей появился желтый предупреждающий знак, как будто пакеты не подходят для этого проекта. После выгрузки проекта и загрузки обратно предупреждающий знак пропал! (Я использую Visual Studio 2019)
Надеюсь, это поможет!
Ответ 4
Одна из причин, по которой я столкнулся с этой ошибкой - наличие нескольких ссылок на один и тот же пакет в одном или нескольких файлах .csproj. В нашем случае это ссылки на локальные зависимости в нашем собственном хранилище nuget.
Это невидимо для разработчика в Visual Studio, поэтому вам нужно открыть файл .csproj в отдельном редакторе.
Я думаю, что для моей команды причина в том, что в зависимой библиотеке и в решении, использующем эту зависимость, много изменений. По какой-то причине git merge примет обе версии в файле .csproj без возникновения конфликта. В нескольких файлах проекта я обнаружил 3 версии одной и той же зависимости.
Ответ 5
У меня была эта проблема с проектом .Net Core 2.2 с использованием .Net Standard 2.0 DLL в том же решении. Мне сообщили об ошибках для .Net Standard DLL, когда я добавил несколько пакетов SeriLog в приложение .Net Core. Я отклонил изменения, затем добавил пакеты SeriLog один за другим, очищая и перестраивая между каждым добавлением. На этот раз не было ошибки...