如何控制C#项目中子依赖的版本?

How do I control the version of sub-dependencies in a C# project?

我们的组织有一个内部 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 核心 3.1 上,而不是 5.xx

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

其他内容也发生了变化,或者您没有运行从干净状态恢复,因为 Microsoft.Extensions.Logging.Abstractions 的版本在您描述的情况下会再次下降。

有几种方法可以查看您的问题出在哪里:

更长更普遍有用的方式

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

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

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

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

快速简便的方法

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