检测到包降级: xxx 从 x.x.x 降级到 x.x.x。直接从项目引用包以选择不同版本。NuGet 警告 NU1605

情景再现

举个栗子: 你的类库引用了 log4net 2.0.8 ( log4net 依赖.NETStandard 1.3) 而你的项目使用了.NET Core 3 , 此时就有可能出现警告,或者编译时报错 NU1605

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 检测到包降级: System.IO.FileSystem 从 4.3.0 降级到 4.0.1。直接从项目引用包以选择不同版本。 XXX.YYY.API -> XXX.YYY -> log4net 2.0.8 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.IO.FileSystem (>= 4.3.0) XXX.YYY.API -> XXX.YYY -> log4net 2.0.8 -> System.IO.FileSystem (>= 4.0.1) XXX.YYY.API E:\Sources\new\VX.XXX\XXX.YYY.API\XXX.YYY.API.csproj 0

原因

依赖项包在包的更高版本上指定了版本约束,而不是最终解析还原。 这是由于最接近的 wins规则-解析包时,图形中的 "即将出现的包" 的版本将覆盖具有相同 ID 的远处包的版本。

解决办法

参考 微软文档 https://docs.microsoft.com/zh-cn/nuget/reference/errors-and-warnings/nu1605

  1. 在项目中出现还原错误时,将包引用添加到包的更高版本。
  2. 当在 .NET Core 3.0 或更高版本的项目中同时引用时,与 .NET Core 1.0 和1.1 随附的某些包组合不兼容。 问题包通常以 System. 或 Microsoft. 开头,并具有4.0.0 和4.3.1 之间的版本号。 在这种情况下,降级消息将具有从运行时开始的包。 依赖关系链。

若要解决此问题,请添加以下 PackageReference: 

 

参考

https://docs.microsoft.com/zh-cn/nuget/reference/errors-and-warnings/nu1605

https://www.nuget.org/packages/log4net/

检测到包降级: xxx 从 x.x.x 降级到 x.x.x。直接从项目引用包以选择不同版本。NuGet 警告 NU1605_第1张图片

 检测到包降级: xxx 从 x.x.x 降级到 x.x.x。直接从项目引用包以选择不同版本。NuGet 警告 NU1605_第2张图片

你可能感兴趣的:(检测到包降级: xxx 从 x.x.x 降级到 x.x.x。直接从项目引用包以选择不同版本。NuGet 警告 NU1605)