c# - 如何控制 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?
解决方案
要么其他东西也发生了变化,要么你没有从干净状态运行恢复,因为在Microsoft.Extensions.Logging.Abstractions
你描述的场景中,版本会再次下降。
有几种方法可以查看您的问题所在:
更长更普遍有用的方法
删除obj/
项目旁边的目录以确保您从干净状态开始,然后运行dotnet restore
.
现在打开obj/project.assets.json
。这列出了依赖关系树中的所有包,以及每个包直接依赖的包。
搜索Microsoft.Extensions.Logging.Abstractions
并检查您拥有的版本。如果它仍然是更高版本,那么您可以查看哪些软件包依赖于它。
然后,您可以追溯依赖关系,直到最终找到您直接引用的包,并且您需要引用该包的较低版本。
快速简便的方法
Microsoft.Extensions.Logging.Abstractions
在您想要的版本中添加对项目的直接包引用,然后运行dotnet restore
. 这将因包降级错误而失败,并且错误消息将包含正在拉入更高版本并导致问题的依赖链。
推荐阅读
- c++ - Makefile 更改以在不同格式的文件之间进行选择
- linux - bash 脚本使用 csv 创建用户
- clojure - X秒后如何让响铃请求超时?
- php - 如何将字符串 json 转换为 PHP?
- reactjs - 如何同时使用 webpack "file-loader" 和 "@svgr/webpack" (或 svg-inline-loader)
- reactjs - Axios 2 发布请求 - 在第二个请求中使用第一个帖子的响应?
- python - 使用 Altair 进行交互式绘图
- database - LibreOffice 作业。解决冗余。将两个外键(其中一个都不存在)“翻译”成一个(超类型)
- python - 有没有办法检测 Tkinter 变量是否已被用户更改而不是内部更改?
- spring-boot - 在 Spring JPA 中获取包含评论和用户信息的列表帖子