首页 > 解决方案 > 如何控制 C# 项目中子依赖项的版本?

问题描述

我们的组织有一个内部 NuGet 包,它依赖于 Microsoft.Extensions.Logging.Abstractions,最低版本为 3.1.10。

我们的一位开发人员将另一个 NuGet 依赖项更新为 >5.0 版本。此 NuGet 依赖项还依赖于 Microsoft.Extensions.Logging.Abstraction。此更新导致 Microsoft.Extensions.Logging.Abstraction 的所有依赖项上移至 >5.0。

错误更新的 nuget 依赖项已恢复,尽管 Microsoft.Extensions.Logging.Abstraction 的子依赖项尚未恢复到其 3.1.xx 版本,这导致构建失败,因为在 .NET core 3.1 而不是 5.xx 上运行

有没有办法将子依赖项 Microsoft.Extensions.Logging.Abstraction 降到 v 3.1.10?

标签: c#visual-studiodependenciesnuget

解决方案


要么其他东西也发生了变化,要么你没有从干净状态运行恢复,因为在Microsoft.Extensions.Logging.Abstractions你描述的场景中,版本会再次下降。

有几种方法可以查看您的问题所在:

更长更普遍有用的方法

删除obj/项目旁边的目录以确保您从干净状态开始,然后运行dotnet restore​​.

现在打开obj/project.assets.json。这列出了依赖关系树中的所有包,以及每个包直接依赖的包。

搜索Microsoft.Extensions.Logging.Abstractions并检查您拥有的版本。如果它仍然是更高版本,那么您可以查看哪些软件包依赖于它。

然后,您可以追溯依赖关系,直到最终找到您直接引用的包,并且您需要引用该包的较低版本。

快速简便的方法

Microsoft.Extensions.Logging.Abstractions在您想要的版本中添加对项目的直接包引用,然后运行dotnet restore​​. 这将因包降级错误而失败,并且错误消息将包含正在拉入更高版本并导致问题的依赖链。


推荐阅读