如何确保ILRepack合并后的C# DLL正确部署至GAC?
解决ILRepack合并DLL后正确部署到GAC的问题
问题根因
当前流程顺序完全倒置:VS编译出未合并的DLL→执行生成后事件将预合并DLL部署到GAC→最后才运行ILRepack生成合并后的最终DLL,导致GAC中安装的是未合并的半成品。
直接解决方案
把ILRepack的合并命令移到生成后事件的最前端,确保合并操作完成后,再执行GAC的卸载与安装:
- 打开项目属性 → 生成事件 → 生成后事件命令行
- 将原有命令替换为以下内容(注意替换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
相关产品推荐
相关产品推荐

