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

如何确保ILRepack合并后的C# DLL正确部署至GAC?

解决ILRepack合并DLL后正确部署到GAC的问题

问题根因

当前流程顺序完全倒置:VS编译出未合并的DLL→执行生成后事件将预合并DLL部署到GAC→最后才运行ILRepack生成合并后的最终DLL,导致GAC中安装的是未合并的半成品。

直接解决方案

把ILRepack的合并命令移到生成后事件的最前端,确保合并操作完成后,再执行GAC的卸载与安装:

  1. 打开项目属性 → 生成事件 → 生成后事件命令行
  2. 将原有命令替换为以下内容(注意替换ILRepack的实际路径及合并参数):
:: 先执行ILRepack合并所有依赖程序集
"C:\你的ILRepack实际路径\ILRepack.exe" /out:$(TargetDir)$(TargetFileName) $(TargetDir)依赖库1.dll $(TargetDir)依赖库2.dll $(TargetDir)$(TargetFileName)

:: 卸载GAC中的旧版本程序集
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\gacutil.exe" -u $(TargetName)

:: 将合并完成的最终DLL部署到GAC
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\gacutil.exe" -i $(TargetDir)$(TargetFileName)

关键注意事项

  • 若通过NuGet安装ILRepack,路径通常为$(SolutionDir)packages\ILRepack.xxx\tools\ILRepack.exe(xxx为实际安装的版本号)
  • ILRepack的/out参数直接指定覆盖原编译输出的DLL即可,后续gacutil调用的$(TargetFileName)会自动指向合并后的版本
  • 必须严格遵循「合并→卸载旧版→安装新版」的顺序,避免GAC出现版本冲突

验证方式

构建完成后,执行以下命令查看GAC中的程序集信息,确认版本与合并后的DLL一致:

gacutil.exe /l $(TargetName)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:24:49