c# - 不同版本的Nuget包版本解析
问题描述
我正在使用一个 Nuget 包,它本身引用了以前的版本System.Reactive
(特别是 4.3.2)。我不是维护者,不能改变它,但仍然想使用这个包。但是,我的解决方案中的所有项目都引用了 (5.0.0) 的较新版本System.Reactive
,我目前无权更改它。这会导致版本冲突。
过去我会使用绑定重定向,但我们最近已经过渡到 .NET Core 和PackageRefernce
s,我不清楚如何使用PackageReference
s 解决此类版本冲突。
那么两个密切相关(我假设)的问题:
- 是否可以解决上述情况,如果可以,如何解决?
- 如何解决相反的情况(外部包中的新版本,我的解决方案/项目中的旧版本)?
解决方案
从根本上说,因为您要解决两个不同的主要版本,所以目前没有解决这个问题的愉快方法。
从 4.x 到 5.x的事实System.Reactive
表明存在重大变化,假设它实际上遵循 SemVer。因此,您所依赖的软件包完全有可能依赖于 5.0.0 中System.Reactive
删除的某些内容。
除非您想自己使用AssemblyLoadContext
某种隔离级别来加载程序集,否则您基本上不走运。.NET 目前根本无法很好地处理这种情况。
我建议你找出最不痛苦的方法,将所有东西都放到同一个主要版本上。这可能意味着:
- 降级你的
System.Reactive
依赖 - 说服其他包的维护者升级他们的
System.Reactive
依赖(这意味着他们也创建了一个新的主要版本......) - 分叉另一个包,以便您可以
System.Reactive
自己升级它的依赖项
不幸的是,这些都不可能是简单的。
推荐阅读
- c# - 将 json 对象转换为仅具有属性子集的类型化对象
- xml - 如何在 z/OS 上使用 ENTITY 为 Tomcat 拆分 server.xml?
- ansible - Ansible 错误:任务包含一个带有未定义变量的选项
- flutter - Flutter with provider 模式:如何以及在何处获取异步数据
- asp.net - 无需预编译源代码即可执行 IIS .NET webforms 网站
- .htaccess - 不工作的可变域重定向
- java - Apache Camel - 在 Rest DSL 中编组到 Json
- android - Flutter Google Play 对 Play 商店的 64 位要求
- c# - WebAPI 2 自定义路由
- arrays - CSDL 格式转 JSON