NuGet 警告 NU1605
示例 1
检测到包降级:“PackageB”从 4.0.0 降级到 3.5.0。 直接从项目引用包以选择其他版本。
'Project' -> 'PackageA' 4.0.0 -> 'PackageB' (>= 4.0.0)
'Project' -> 'PackageB' (>= 3.5.0)
问题
依赖关系包对更高版本的包指定了版本约束,而不是还原最终解析的版本。 这是因为 direct-dependency-wins 规则在解析包时,子图中的直接包版本会覆盖具有相同 ID 的遥远包版本。
解决方案
若要显示还原警告的项目,请添加对更高版本包的包引用。
在以上示例中,将包引用更改为 PackageB
4.0.0:
'PackageA' 4.0.0 -> 'PackageB' 4.0.0
'PackageB' 4.0.0
示例 2
检测到包降级:“PackageC”从 2.0.0 降级到 1.1.0。 直接从项目引用包以选择其他版本。
'Project' -> 'PackageA' 1.0.0 -> 'PackageB' 2.0.0 ->'PackageC' (>= 2.0.0)
'Project' -> 'PackageA' 1.0.0 -> 'PackageC' (>= 1.1.0)
问题
依赖关系包对更高版本的包指定了版本约束,而不是还原最终解析的版本。 这是因为 direct-dependency-wins 规则在解析包时,NuGet 会尝试遵循包作者的意图。
PackageA
的作者已从 PackageC
1.1.0 显式降级到 PackageC
2.0.0。
解决方案
若要显示还原警告的项目,请添加对更高版本包的包引用。
在以上示例中,将包引用更改为 PackageC
2.0.0:
'PackageA' 4.0.0 -> 'PackageB' 4.0.0
'PackageB' 4.0.0
示例 3
检测到的包降级:System.IO.FileSystem.Primitives 从 4.3.0 降级到 4.0.1。 直接从项目引用包以选择其他版本。
Project -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.IO.FileSystem.Primitives (>= 4.3.0)
Project -> System.IO.FileSystem 4.0.1 -> System.IO.FileSystem.Primitives (>= 4.0.1)
问题
.NET Core 1.0 和 1.1 附带的某些包组合在 .NET Core 3.0 或更高版本中同时引用并指定 RuntimeIdentifier 时会彼此不兼容。 有问题的包通常会以 System.
或 Microsoft.
开头,且版本号介于 4.0.0 到 4.3.1 之间。 在此情况下,降级消息会包含在依赖关系链中以 runtime.<RID>
开头的包。
解决方案
若要解决此问题,请添加以下 PackageReference:
<PackageReference Include="Microsoft.NETCore.Targets" Version="3.0.0" PrivateAssets="all" />
可选择使用与 SDK 主版本匹配的 version
。
示例 4
检测到包降级:Microsoft.NETCore.App 从 2.1.8 降级到 2.1.0。 直接从项目引用包以选择其他版本。
test -> mvc -> Microsoft.NETCore.App (>= 2.1.8)
test -> Microsoft.NETCore.App (>= 2.1.0)
问题
mvc 项目对更高版本的包指定了版本约束,而不是还原最终解析的版本。 这是因为 direct-dependency-wins 规则在解析包时,图中的直接引用包版本会覆盖具有相同 ID 的遥远包版本。
解决方案
通过将 .NET Core SDK 升级到 2.2.100 或更高版本可改进此特定错误(带 Microsoft.NETCore.App 包)。 Microsoft.NETCore.App 是 .NET Core SDK 在版本 3.0.100 之前选择自动引入的自动引用包。 另请参阅自包含的部署运行时前滚。
注意
虽然 NU1605 被视为 NuGet 工具的警告,但 .NET SDK 选择将此警告视为通过 WarningsAsErrors
发出的错误。
你的项目可能会通过将 TreatWarningsAsErrors
设为 true
从而将此警告升级为错误。
由于更有可能遇到运行时问题,因此虽然不建议这样做,但仍可选择不显示此警告。
提示
替代解决方案:NuGetSolver 是由 Microsoft DevLabs 开发的 Visual Studio 扩展,旨在帮助解决依赖项冲突问题。 它可以自动执行识别和解决这些问题的过程。 有关更多详细信息,请访问 Visual Studio Marketplace 上的 NuGetSolver 页面,我们很乐意听取您的体验反馈。