错误 NU1605 检测到包降级

Error NU1605 Detected package downgrade

我在 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。

从 CLI 执行 dotnet restore 时,我也收到以下错误,我不确定是否相关:

C:\Program Files\dotnet\sdk.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.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.

Error NU1605 Detected package downgrade

对于错误NU1605:

您可以使用<NoWarn>NU1605</NoWarn>清除项目中的WarningsAsErrors

因为 netcoreapp2.0 个项目默认有 <WarningsAsErrors>NU1605</WarningsAsErrors> 个。从 Properties->Build->Treat warning as errors 检查它:

添加如下:

<PackageReference Include="Colorful.Console" Version="1.2.6">
      <NoWarn>NU1605</NoWarn>
</PackageReference>

在此处查看博客 post:MSBuild integration of NuGet warnings and errors and Unexpected package version warnings

对于错误NU1603:

出现警告是因为 Feed 中不存在 System.Runtime.Handles (>= 4.1.0)。通常这是包创作错误,因为包依赖于不存在的东西。

您也可以使用 <NoWarn>NU1603</NoWarn> 来解决这个问题:

<PropertyGroup>
      <NoWarn>NU1603</NoWarn>
</PropertyGroup>

注意:您会注意到您的项目有另一个警告,请注意参考资料中 PackageReference DotSpinners 上的黄色三角形标志。那是因为包 DotSpinners 是一个 .NET Framework 项目,与您的 .NET Core 项目不兼容。

确保您使用相同的版本进行构建和发布 你可以修复它添加 2.1.9 在 PropertyGroup 下的 .csproj 文件中,这应该与您当前的设置版本相匹配。 例如:

  <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>netcoreapp2.1</TargetFramework>    
      <RuntimeFrameworkVersion>2.1.9</RuntimeFrameworkVersion> 
  </PropertyGroup>

我得到的错误是: NETSDK1061:项目已使用 Microsoft.NETCore.App 版本 2.1.9 恢复,但使用当前设置,将使用版本 2.1.0。

我 运行 导致此错误的原因是在一个或多个 .csproj 文件中多次引用同一包。在我们的例子中,这些引用是对我们自己的 nuget 存储库中的本地依赖项。

这对于 Visual Studio 中的开发人员是不可见的,因此您需要在单独的编辑器中打开 .csproj 文件。

对于我的团队,我认为原因是依赖库和使用该依赖项的解决方案中大量流失的组合。无论出于何种原因,git 合并都将采用 .csproj 文件中的两个版本而不会引发冲突。在几个项目文件中,我发现了同一个依赖的3个版本。

我在 .netcoreapp2.2 控制台应用程序中遇到了类似的问题。

项目构建成功。但是,发布失败并出现多个 NU1605 错误。

问题源自log4net 版本2.0.8。它在具有以下依赖项的 .netstandard2.0 项目中被引用:

它们导致引用 log4net 的项目中的包降级。在发布期间,这些警告被视为错误...

为了解决这个问题,我通过 Nuget 添加了这些库的正确版本。

终于发布成功了

P.S. 当我第一次添加带有最新版本库的包时,依赖项列表中显示黄色警告标志,好像这些包不合适对于那个项目。卸载项目并重新加载后,警告标志消失了! (我使用的是 Visual Studio 2019)

我在同一解决方案中使用 .Net Standard 2.0 DLL 的 .Net Core 2.2 项目遇到了这个问题。当我将几个 SeriLog 包添加到 .Net Core 应用程序时,我收到了 .Net Standard DLL 的错误报告。我取消了更改,然后一个接一个地添加 SeriLog 包,在每次添加之间进行清理和重建。这次没有报错...

我在发布时遇到了类似的问题 (NU1605),但我发现是运行时 linux-x64。所以我删除了运行时选项,问题就解决了。

我不确定这是否是解决此问题的最佳选择或方法,但我遇到了同样的问题:

NuGet Warning NU1605 (package downgrade)

我的淘汰过程是为了确保我的项目是: 1.保存 2.构建解决方案(ctrl shift b)(唯一错误是NU1605) 3. 右击项目文件夹,点击进入Manage NuGet packages。 4.点击更新,我亲自更新了所有包。 5.(再次执行第 2 步)。

这就是我需要做的。希望这是相同的结果。

刚刚遇到与 .Net core 3.1log4Net 相同的问题 (NU1605):

error NU1605: Detected package downgrade: System.Net.NameResolution from 4.3.0 to 4.0.0.

我所做的是添加对 System.Net.NameResolution 的 Nuget 引用并安装 4.3.0 版,然后我关闭 Visual Studio 并重新打开解决方案。

以上所有内容对我的 .NET Core 3.1 项目都没有帮助。

重新编译完成后,NU1605错误再次出现。 csproj 文件中对版本号的所有引用都是正确的。

最终有用的是 删除 obj 文件夹

之后重新编译没有问题。

我有一个类似的问题,我的项目有这样的包引用:

包参考:

  • 套餐 A
  • 套餐B
    • 套餐 A

因为项目 B 引用了包 A,所以我刚刚从主包列表中删除了包 A,剩下的包 B 引用了包 A。 我重建了解决方案,问题消失了。

这个问题已经有很多答案,其中很多解决了问题,但我认为我应用的解决方案比我在网上看到的所有其他解决方案都干净。

如前所述,.Net Core 3.1 中的错误通常怀疑是某些程序集依赖于需要 System.*Microsoft.* 程序集的库。

构建运行时,一切正常,因为程序集的解析仅使用项目引用。
当执行“发布”构建时,选择了运行时,程序集的分辨率不遵循 Nuget 在恢复时使用的算法,因此警告逐渐增加。

根据这种情况,遵循我的解决方案:当我们使用目标运行时执行构建时,我们希望强制选择正确的运行时版本。

在 .csproj 文件中,我添加了这个:

<!-- adjust runtime and package version accordingly -->
<ItemGroup Condition="'$(RuntimeIdentifier)' == 'win-x64' ">
  <PackageReference Include="Microsoft.NETCore.Targets" Version="3.1.0" />
</ItemGroup>

this link 找到的 Microsoft.NETCore.Targets 包(其中有很多关于警告的信息)是解决可怕警告的方法之一,并且仅将其包含在发布版本中所有其他构建保持不变。这个包的好处是它是 一个 包,并且包括所有运行时。

我在向 ASP.Net Web 服务添加连接服务引用时遇到了这个问题。在项目 Nop.Plugin.SDE 中添加了此引用,导致添加了对 System.ServiceModel.Http 4.4.4 的引用,而它已经在引用项目 Nop.Services 并引用了 System.ServiceModel.Http 4.7.0。解决方案是将对 System.ServiceModel.Http 的引用从项目 Nop.Plugin.SDE.

升级到版本 4.7.0

我引用的 GraphQL nuGet 包依赖于 Newtonsoft.Json(>= 10.0.3)。唯一的解决方案如下:

  • 删除 GraphQL nuGet 包。
  • 安装最新的 NewtonSoft.Json 软件包 v12.0.3
  • 返回并重新安装 GraphQL nuGet 包。

为什么 dotnet restore 仅在 RuntimeIdentifier:win10-x64 上带来依赖警告。 portable运行时正常。

在阅读了上述所有建议并参考了@Mert 接受的答案后,对我有用的是删除导致不一致的特定包

在包文件夹内,visual studio 用黄色警告标志标记导致问题的包非常有用。

我删除了软件包并使用 NuGet 安装了相应版本的软件包。

我在尝试更新 Nuget 包时 运行 使用 .NET 5 进入 NU1605。

this 文章中示例 2 的解决方案非常适合我。

简而言之,我只需要添加

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

到项目的ItemGroup,这是更新的目标(在VS中,当我双击“检测到的包降级”错误消息时,出现了相关的.csproj)。

可能有人添加了一个新版本的新项目,也可能有一些旧版本的项目。将所有项目升级到同一版本即可解决问题。