Ошибка 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>

И они, кажется, восстановить нормально

Package References

Проект также ссылается на 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-> Обрабатывать предупреждение как ошибки:

enter image description here

Добавить как следующее:

<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 v2.0.8 does not include specific dependency for .NetStandard,Version=2.0

Они вызывали понижение пакетов в проектах, ссылающихся на log4net. И во время публикации эти предупреждения рассматриваются как ошибки...

Чтобы решить эту проблему, я добавил правильные версии этих библиотек через Nuget.

log4net dependencies and additional nuget packages for version errors

Наконец, публикация прошла успешно.

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 один за другим, очищая и перестраивая между каждым добавлением. На этот раз не было ошибки...