错误 NU1605 检测到包降级

123

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

当从CLI执行dotnet restore时,我还会得到以下错误,我不确定是否有关:

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
这个问题有任何更新吗?您解决了这个问题吗?如果没有,能否请您告诉我关于这个问题的最新信息? - Leo Liu
如果你遇到了这个问题,可能是因为你引用了一个引用了同一个包但不同版本的库。尝试通过引用项目中的Nuget管理器更新包。 - oliverdejohnson
1
虽然这是一个相当古老的问题,但我在.NET 5.0中遇到了与System.IO.FileSystem.Primitives和System.Runtime.Handles类似的问题。两者都指出我使用的是过时版本,例如4.0.1,并告诉我将其升级到4.3.0。我只需在nuget中安装这些库并选择正确的版本: System.IO.FileSystem.Primitives -> 4.3.0 System.Runtime.Handles -> 4.3.0 然后它就可以工作了,错误不再存在。希望我能帮助未来遇到此问题的人。 - GoodOldGuy
我的天真情况是我已经更新了引用,但忘记推送其中一个项目。唉,构建服务器得到了更新和未更新的项目引用。 - LosManos
19个回答

99

我遇到了一个与 .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)


我刚遇到了这个确切的问题。我有一个项目要发布,它的目标是 .Net Core 和 .Net Standard。我认为这个问题只在我将 .Net Standard 添加为目标框架时才出现。添加这三个包解决了这个问题。 - phansen
1
我在使用log4net时遇到了完全相同的问题。您是如何更改它的特定DLL依赖项的?我的.NetCore版本是3.1.0。 - M P
你可以在NuGet中搜索dll并安装最新版本。 - Mert Can Ilis
更新“System.ServiceModel.Primitives”解决了我的问题,谢谢。 - Mehdi Daustany
它对从 .Net 5 迁移到 .Net 6 也很有帮助。 - Jacek Labuda
显示剩余3条评论

56

检测到软件包降级错误 NU1605。

关于错误 NU1605

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

这是因为 netcoreapp2.0 项目默认具有 <WarningsAsErrors>NU1605</WarningsAsErrors>。您可以从属性- >生成-> 将警告视为错误中进行检查:

enter image description here

添加如下内容:

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

查看博客文章:使用 NuGet 警告和错误的 MSBuild 集成意外的软件包版本警告

对于错误 NU1603:

警告发生是因为在 feed 中不存在System.Runtime.Handles(>= 4.1.0)。通常这是一个软件包作者的错误,因为软件包依赖于不存在的内容。

您还可以使用 <NoWarn>NU1603</NoWarn> 来解决此问题:

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

注意:您会注意到您的项目有另一个警告,注意包引用DotSpinners上的黄色三角形标志。这是因为包DotSpinners是一个.NET Framework项目,与您的.NET Core项目不兼容。


23
好的信息,但实际上并没有解决问题,它只是在构建过程中忽略了问题。当发布时,当这些dll尝试被加载时,会出现运行时错误。请参考Mert的答案。 - Michael Brown
通常情况下,忽略这些警告并构建和运行程序是没有问题的。当然,关注和解决核心问题是一个好习惯。但在这种情况下,这些警告应该保持为警告而不是错误。也许在未来的版本中会有所改变。 - James John McGuire 'Jahmic'
5
我非常非常不喜欢这个答案。禁言警告绝不能是解决方案,尤其是在有其他选择的情况下。 - Alberto Chiesa
我曾经很苦恼,最后只是从Nugget添加了最新版本的dll,然后卸载->重新加载项目,一切都正常工作了。谢谢。 - Nishant Kumar Verma

12

所有的方法都没有对我的.NET Core 3.1项目有帮助。

在完全重新编译后,错误“NU1605”一次又一次地重新出现。在csproj文件中,版本号的所有引用都是正确的。

最终起作用的是删除obj文件夹

之后重新编译就没有问题了。


10

我遇到了与.NET Core 3.1和log4Net相关的NU1605错误,错误信息如下:

error NU1605:检测到包降级:System.Net.NameResolution从4.3.0降级到4.0.0。

我的解决方法是添加一个NuGet引用到System.Net.NameResolution并安装版本4.3.0,然后关闭Visual Studio并重新打开解决方案。


2
对我来说,只需要重新启动Visual Studio即可解决问题。有点奇怪。 - Ian Gibblet
同样的问题在这里。但是最新的log4net nuget包已经解决了这个问题。所以我已经将其删除了。 - Kamran Shahid
1
@IanGibblet 对于每个问题,重新启动应该是尝试的第一个解决方案 :D - Hamza Iftikhar

6
我是一位有用的助手,可以为您翻译文本。
我在尝试更新Nuget包时,使用.NET 5遇到了NU1605错误。 this文章中的示例2解决方案对我非常有效。
简而言之,我只需要添加:
<PackageReference Include="Microsoft.NETCore.Targets" Version="5.0.0" PrivateAssets="all" />

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

这对我来说也是完美的解决方案,而且直接来自于微软文档! - Damien Sawyer

5
我曾遇到引起此错误的原因之一是在一个或多个.csproj文件中多次引用同一个包。 在我们的情况下,这些引用是来自我们自己的Nuget存储库中的本地依赖项。
这对于Visual Studio中的开发人员来说是不可见的,因此您需要在单独的编辑器中打开.csproj文件。
对于我的团队,我认为原因是依赖库和消耗该依赖项的解决方案都有很多变动。 由于某种原因,git合并将在.csproj文件中同时采用两个版本而不会引发冲突。 在几个项目文件中,我发现了3个相同依赖项的版本。

这是任何人寻找正确答案的正确答案。 我们正在构建Xamarin项目。在VSCode中打开项目,并查看子项目的.csproj文件,以查找具有“PackageReference”元素的项目组,并将其更新为与默认值相同。 我仍在研究为什么VS没有这样做,但这会帮助你入门。 - markyk

5

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

  <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

这个问题已经有许多答案了,其中许多都解决了这个问题,但我认为我应用的解决方案比我在网上看到的其他所有东西都更简洁。

如上所述,在 .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>

Microsoft.NETCore.Targets 是一个解决可怕警告的方案之一,该包可以在此链接中找到(该链接提供了大量有关警告的信息),并且仅在发布版本中包含,使得其他版本保持不变。这个包的好处是它是唯一的一个包,包含所有的运行时。


1
那对我没用...这个问题真让人恼火。 - Piotr Kula

1
我不确定这是否是解决此问题的最佳选项或方法,但我遇到了相同的问题:
NuGet警告NU1605(包降级)
我的排除流程是确保我的项目: 1. 已保存 2. 构建解决方案(Ctrl Shift B)(仅出现NU1605错误) 3. 右键单击项目文件夹,进入管理NuGet包。 4. 单击更新,我个人更新了所有程序包。 5. (再次进行第2步)。
这是我需要做的全部。希望这也是相同的结果。

1
我曾在一个使用.Net Core 2.2项目中遇到问题,该项目同时使用了一个.Net Standard 2.0 DLL。当我在.Net Core应用程序中添加了几个SeriLog包时,就会报告.Net Standard DLL的错误。我撤销了更改,然后逐个添加SeriLog包,在每次添加之间进行清理和重建。这次没有出现错误...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接