【问题标题】:How do I control the version of sub-dependencies in a C# project?如何控制 C# 项目中子依赖项的版本?
【发布时间】:2021-11-22 15:33:27
【问题描述】:

我们的组织有一个内部 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?

【问题讨论】:

  • 您需要繁琐地检查 VS 添加到您的项目中的所有工件(注意,我只在框架项目中做过,而不是在核心项目中)。查看 proj 文件、配置文件(特别是如果有 <bindingRedirect/> 条目)以及 NuGet 配置信息的存储位置
  • 我认为这两个版本的 NuGet 包都保存在C:\Users\[user name]\.nuget\packages\[your nuget package name] 文件夹中,没有被删除。请尝试修改项目文件(.xxproj文件例如.csproj文件)并找到<PackageReference … />,然后将当前版本更改回以前的版本,子依赖项也应该自动更改以匹配它。

标签: c# visual-studio dependencies nuget


【解决方案1】:

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

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

更长更普遍有用的方式

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

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

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

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

快速简便的方法

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

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 2011-06-25
    • 2020-07-24
    • 2016-11-29
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多