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

.NET Core 3.1 Jenkins发布后出现程序集版本不匹配无法加载错误

根因说明

你遇到的是多项目批量发布到同一输出目录的典型同名DLL覆盖问题:dotnet publish对整解决方案执行发布并指定统一输出目录时,会按照项目的编译发布顺序依次复制输出文件,后完成发布的项目如果携带了低版本的同名DLL,会直接覆盖先发布项目的高版本DLL。你单独查看每个项目bin目录版本正常,是因为单个项目独立发布时没有被其他项目的文件覆盖,仅汇总输出时才会出现版本错误。

解决建议

  • 调整发布逻辑,不要直接对解决方案执行带统一输出目录的publish操作:改为逐个项目发布,将主入口项目放在最后一步发布,保证主项目依赖的高版本DLL不会被其他项目的低版本文件覆盖。
  • 新增统一版本绑定配置:在解决方案根目录新增Directory.Build.props文件,全局强制指定该包的引用版本,配置内容如下:
<Project>
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" Explicit="True" />
  </ItemGroup>
</Project>

该配置会自动作用于解决方案下所有项目,强制所有项目统一引用5.0.0版本的包,从源头避免多版本引用的问题。

  • 新增SDK版本锁定配置:在解决方案根目录新增global.json文件,指定构建使用的SDK版本,避免构建机器多版本SDK带来的引用混乱,配置示例:
{
  "sdk": {
    "version": "3.1.403",
    "rollForward": "disable"
  }
}
  • 输出详细构建日志定位问题项目:在现有dotnet publish命令中添加-v diag参数,生成详细构建日志,搜索日志中Microsoft.Extensions.DependencyInjection.Abstractions.dll的复制操作记录,可直接定位到是哪个项目将低版本DLL复制到了最终输出目录,针对性调整该项目的引用配置。
  • 临时兜底方案:在Jenkins构建流程的publish步骤之后,新增一步文件复制操作,手动将主项目bin目录下的正确版本Microsoft.Extensions.DependencyInjection.Abstractions.dll复制到最终输出目录,强制覆盖错误版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:06:00