释义
ILMerge是一个可用于将多个.NET程序集合并为单个程序集的实用程序。
ILMerge接收一组输入程序集并将它们合并到一个目标程序集中。输入程序集列表中的第一个程序集是主程序集。
当主组件是可执行文件时,目标程序集将创建为与主程序集具有相同入口点的可执行程序。而且,如果主组件具有强名称,并提供了.snk文件,则使用指定的键重新签名目标程序集,以使其具有强名称。
注意:当程序集中包含非托管代码等功能时可能会导致无法合并
ILMerge作为控制台程序打包,也可以使用与编程方式访问,详细阅读微软文档,我们这里暂时之讲解ILMerge的控制台打包
准备
1.下载ILMerge,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=17630
2.安装ILMerge,下一步下一步......完成,ok
3.准备合并打包用的dll和exe
操作
1.合并生成exe
ILMerge /log /target:winexe /out:sample.exe sourceTestQuartz.exe sourceCommon.Logging.Core.dll
说明:
》/log:生成日志,可以忽略,控制台会输出log
》/target:生成输出类型,可以简写为/t
》/targetplatform:输出文件的.net运行版本,我这里没有使用,可以忽略
》/out:输出的文件名称,我是输出到当前ILMerge的根目录,如果需要输出到指定目录,请指定路径,例如我可以输出到 “D:sample.exe”
》多个合并文件注意空格隔开,我这里资源放在了ILMerge目录下的source文件夹下,所以写法为 sourceXXX
2.合并生成dll
ILMerge /log /target:dll /out:sample.dll sourceNPOI.dll sourceNPOI.OOXML.dll
上面已经介绍过就不多说了
备注 ----参考csdn-iloli的文章,笔者没有测试,做备注使用
1.interop这种由COM转换过来的DLL合并:相关依赖的DLL必须也一起合并,vbide.dll要复制到目录一起合并
2.如果有资源DLL, 应该将要被合并的oldclient.exe先改为别的名称,因为资源文件为XX.resources.dll,而ILMERGE不能合并资源文件,否则在导出后将找不到此资源文件
参考
https://github.com/Microsoft/ILMerge/blob/master/ilmerge-manual.md
http://blog.csdn.net/iloli/article/details/9324569
http://www.sufeinet.com/forum.php?mod=viewthread&tid=17822