ChatGPT解决这个技术问题 Extra ChatGPT

错误 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>

他们似乎恢复得很好:

https://i.stack.imgur.com/RhyLG.png

该项目还引用了 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.
这个问题有什么更新吗?你解决了这个问题吗?如果没有,请告诉我有关此问题的最新信息吗?
如果您遇到此问题,可能是在不同的包上,可能是因为您引用了一个引用相同包但版本不同的库。尝试在引用项目中通过 Nuget Manager 更新包。
虽然这是一个相当老的问题,但我在 .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 它有效,错误不再存在。希望我可以帮助将来遇到此问题的任何人。

N
Nimantha

我对 .netcoreapp2.2 控制台应用程序有类似的问题。

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

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

https://i.stack.imgur.com/JwQrN.png

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

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

https://i.stack.imgur.com/U4WI8.png

最后,发布成功。

PS 当我第一次使用最新版本的库添加包时,依赖列表上会显示一个黄色警告标志,就好像这些包不适合该项目一样。卸载项目并重新加载后,警告标志消失了! (我正在使用 Visual Studio 2019)


我刚刚遇到了这个确切的问题。我有一个要发布的项目,目标是 .Net Core 和 .Net Standard。我认为这个问题只有在我添加 .Net Standard 作为目标框架时才会出现。添加这三个包解决了这个问题。
我在 log4net 上遇到了完全相同的问题。你是如何改变它的特定 DLL 依赖的?我的 .NetCore 版本是 3.1.0。
您可以在nuget中搜索dll并安装最新版本。
是的,在 .NET Core 3.1 控制台应用程序中,log4net 出现了完全相同的问题。我必须将这些包添加到我的类库以及主要的可执行项目中。
特别是对于 log4net,添加到解决方案中的 Microsoft.NETCore.Targets 库也修复了它。请参阅stackoverflow.com/questions/47712035/…
N
Nimantha

错误 NU1605 检测到包降级

对于错误 NU1605:

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

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

https://i.stack.imgur.com/JL8GW.png

添加如下:

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

在此处查看博文:MSBuild integration of NuGet warnings and errorsUnexpected package version warnings

对于错误 NU1603:

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

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

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

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


很好的信息,但实际上并没有解决问题,它只是在构建过程中忽略了问题。发布时,当尝试加载这些 dll 时,您将收到运行时错误。见默特的回答。
似乎很多时候,忽略这些警告,构建和运行就可以了。是的,关注并解决核心问题是一种很好的做法。但在这种情况下,这些应该保留为警告而不是错误。也许这会在未来的版本中改变。
我真的,真的不喜欢这个答案。沉默警告永远不应该是一个解决方案。尤其是当有替代品时。
我挣扎了很多,最后只是从 nugget 添加了最新版本的 dll,然后卸载->重新加载项目,一切正常。谢谢
U
Uwe Keim

.Net core 3.1log4Net 遇到了同样的问题 (NU1605):

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

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


对我来说,只需重启 Visual Studio。奇怪的。
同样在这里。但问题现在在最新的 log4net nugetpacakge 中得到解决。所以我把它删除了
@IanGibblet 对于每个问题,重新启动应该是第一个尝试的解决方案:D
H
Holger Schmeken

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

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

最终有帮助的是删除 obj 文件夹!

之后重新编译没有问题。


P
PRathore

确保您使用相同的版本进行构建和发布,您可以在 PropertyGroup 下的 .csproj 文件中添加 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 版本。


S
Stuart

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

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

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


对于任何寻找的人来说,这都是正确的答案。我们正在构建这个 Xamarin 项目。在 VSCode 中打开项目并在子项目的 .csproj 文件中查找具有“PackageReference”元素的项目组,并将它们更新为与默认值相同。我仍在研究为什么 VS 不这样做,但这会让你上路。
A
A. Chiesa

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

如前所述,.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 linkMicrosoft.NETCore.Targets 包(其中包含有关警告的大量信息)是可怕警告的解决方案之一,并且仅将其包含在发布构建中可以使所有其他构建保持不变。这个包的好处是它是 one 包,并且包含所有运行时。


这对我不起作用..这个问题太烦人了
M
Mark Willis

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


J
Jones

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

NuGet 警告 NU1605(包降级)

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

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


J
James Lawruk

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

删除 GraphQL nuGet 包。

安装最新的 NewtonSoft.Json 包 v12.0.3

返回并重新安装 GraphQL nuGet 包。


O
Oleg

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


g
gandarez

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


D
Dharman

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

包参考:

套餐A

套餐 B 套餐 A

套餐A

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


S
Steef

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

https://i.stack.imgur.com/luQR9.jpg

https://i.stack.imgur.com/SbXRI.jpg

https://i.stack.imgur.com/JYTMb.jpg


f
fanbyprinciple

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

https://i.stack.imgur.com/OuadW.png

在包文件夹内,Visual Studio 非常有帮助地用黄色警告标志标记导致问题的包。

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


T
TvdH

我在尝试更新 Nuget 包时遇到了 .NET 5 的 NU1605。

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

简而言之,我只需要添加

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

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


l
last-Programmer

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