You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么.NET Core中强制降级Nuget依赖会触发程序集加载异常

这个问题既不是操作错误也不是Bug,属于.NET Core运行时的设计行为,核心原因如下:

  • Nuget的「最近优先」规则仅负责在还原、发布阶段选择要打包到输出目录的Nuget包版本,不会修改已编译程序集的元数据。你引用的NServiceBus.RabbitMQ是强签名程序集,类库项目编译时,元数据中已经硬编码了对6.0.0版本程序集的依赖,运行时默认会严格校验强签名程序集的版本号,版本不匹配就会抛出加载失败异常。
  • .NET Core并非不支持程序集重定向,只是和.NET Framework的配置方式不同。deps.json文件仅记录依赖包的版本对应关系和加载路径,不会自动生成强签名程序集的版本重定向规则,因此你在deps.json中看到的5.2.0版本标注不会覆盖类库元数据中的版本要求。

解决方案

你可以通过以下两种方式解决该问题:

  1. 自动生成绑定重定向规则
    在控制台项目的.csproj文件中新增如下配置,SDK会在编译时自动生成对应的版本重定向规则,将所有对6.0.0版本的请求重定向到输出目录中实际存在的5.2.0版本:
<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
  1. 手动配置运行时重定向
    你也可以手动在项目的runtimeconfig.json文件中添加程序集版本重定向规则,明确指定NServiceBus.Transport.RabbitMQ程序集的版本映射关系。

注意事项

你需要自行评估版本降级的兼容性风险:如果类库中调用了NServiceBus.RabbitMQ 6.0.0中新增、但5.2.0不存在的API,就算版本重定向成功,运行时依然会抛出成员缺失异常。最优方案仍然是统一整个解决方案内所有项目引用的同一个Nuget包的版本,从根源上避免版本冲突。

内容的提问来源于stack exchange,提问作者Dommicentl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:15:08