.NET Core 2.2项目引入MassTransit 7.1.8出现依赖冲突如何解决?
问题解答
能不能在.NET Core 2.2环境下升级Microsoft.Extensions.Hosting.Abstractions到3.1.11?
不能。
你的项目引用了.NET Core 2.2的共享框架Microsoft.AspNetCore.App 2.2.0,该框架对所有Microsoft.Extensions.*系列依赖包的版本做了强制约束,范围固定为>= 2.2.0 && < 2.3.0,无法兼容3.x版本的扩展包。强行安装高版本扩展包不仅会触发NU1107版本冲突错误,运行时也会出现程序集加载失败的问题。
可行解决方案
你可以根据自身项目的限制选择以下任意一种方案:
- 方案1:必须保留.NET Core 2.2环境时,降级MassTransit版本
MassTransit 7.1.8本身的最低依赖就是3.1版本的.NET Core扩展包,和.NET Core 2.2无法兼容。你可以改用支持.NET Core 2.2的MassTransit 5.x稳定版本(如5.5.6),该版本已包含IMessageScheduler的完整实现,依赖的扩展包均为2.x版本,不会触发冲突,包引用参考如下:<PackageReference Include="MassTransit" Version="5.5.6" /> <PackageReference Include="MassTransit.AspNetCore" Version="5.5.6" /> <PackageReference Include="MassTransit.Extensions.DependencyInjection" Version="5.5.6" /> <PackageReference Include="MassTransit.RabbitMQ" Version="5.5.6" /> - 方案2:优先使用高版本MassTransit时,升级项目框架
把项目从.NET Core 2.2升级到.NET Core 3.1、.NET 6或更高的LTS版本,即可正常安装使用MassTransit 7.1.8及更高版本,同时还能获得官方的安全更新支持,是长期维护的最优选择。 - 方案3:不换框架也不降级MassTransit时,移除AspNetCore集成包
版本冲突的直接来源是MassTransit.AspNetCore 7.1.8依赖3.1版本的主机扩展包,你可以移除该包的引用,仅保留核心、RabbitMQ、DI扩展三个包,手动编写代码将MassTransit总线注册到DI容器,自行管控总线的启动、停止生命周期,即可绕开版本依赖冲突。
内容的提问来源于stack exchange,提问作者KoKo
相关产品推荐
相关产品推荐

