去这里下载:
这里下载ILMerge,http://www.microsoft.com/en-us/download/details.aspx?id=17630
这里下载ILMerge-GUI,http://ilmergegui.codeplex.com/
这两部分都是必须的,第一个是命令行的,不好用。第二个是第一个大GUI封装,使第一个工具好用多了!
ILmerge-GUI是用来将一系列的exe,dll文件装载打包成一个exe文件。很好用!
ilmerge命令解析和实例
有时候要发布的软件会包含多个程序集,如果能把多个程序集合成一个有时会比较方便使用。
ILMerge.exe就是用于将多个程序集合并的工具。
官法下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=17630
安装后可在命令提示符中使用。
命令内容:
Usage:
ilmerge [/lib:directory]* [/log[:filename]] [/keyfile:filename [/delaysign]] [/internalize[:filename]]
[/t[arget]:(library|exe|winexe)] [/closed] [/ndebug] [/ver:version] [/copyattrs [/allowMultiple] [/keepFirst]] [/xmldocs] [/attr:filename]
[/targetplatform:<version>[,<platformdir>] | /v1 | /v1.1 | /v2 | /v4] [/useFullPublicKeyForReferences]
[/wildcards] [/zeroPeKind] [/allowDup:type]* [/union] [/align:n]
/out:filename <primary assembly> [<other assemblies>...]
其中这两个是必须的参数:/out:filename <primary assembly>
out:filename 表示输出的程序集名,<primary assembly>
表示输入的主程序集名。下面是一个实例:
ilmerge.exe /t:winexe /targetplatform:v2 /out:Jihua.cnblogs.com.new.exe jihua.cnblogs.com.exe Interop.IWshRuntimeLibrary.dll
D:\WorkSoftware\ILMerge>ilmerge.exe /t:winexe /targetplatform:v4 /out:C:\Users\W
u\Desktop\Baidu\BaiduAPITest\bin\Debug\qqq.exe C:\Users\Wu\Deskto
p\Baidu\BaiduAPITest\bin\Debug\BaiduAPITest.exe C:\Users\Wu\Deskt
op\Baidu\BaiduAPITest\bin\Debug\Newtonsoft.Json.dll
ILMerge使用,dll类库合并
最近做了一个数据成图组件,是对一个com控件的二次开发。
该com控件是个窗体控件在使用过程中自动生成了以AxInterop开头的AxInterop.****.dll
和以Interop.开头的Interop.****.dll
两个中间类,而这两个类放置的位置必须与最终的窗体同目录。
我开发的.net组件名称为:DCGjogis.dll,假设调用该组件生成的windows窗体程序为AAA.exe,要求AAA.exe
与DCGjogis.dll
同目录,因此结果就是,该目录下包含4个文件,分别为:AAA.exe,DCGjogis.dll,AxInterop.****.dll,Interop.****.dll
而要求是该目录下只能包含AAA.exe,DCGjogis.dll
两个文件,剩余的AxInterop.****.dll
,Interop.****.dll
两个文件必须放置在指定的文件夹中。
为了解决这个问题,研究了好久,都没有什么好的办法,后来终于找到一个取巧的办法,就是使用ILMerge合并dll类库。
1、下载并安装ILMerge.exe
2、我的安装目录是:D:\Program Files (x86)\ILMerge
,然后在cmd命令中,进入该目录
3、在该目录下运行ILMerge.exe命令,我的命令是:
ILMerge.exe /ndebug /target:library /out:DCGjogis.dll DLL/DCGjogis.dll /log DLL/AxInterop.****.dll DLL/Interop.****..dll
/target 是输出类型;/out是输出dll类名称;/log是要合并的dll类名称,由于我的其它类是放置在“DLL”目录下,因此带有路径。
注意:
1、原始DCGjogis.dll
自身包含其它引用类,都需要放置在与原始DCGjogis.dll
相同的目录下。
2、如果原始DCGjogis.dll
自身包含其它引用类,而其它引用类是相对路径的话,那么其它引用类每次更新,合并DCGjogis.dll
都需要重新合并制作。
通过合并,最终实现了AAA.exe,DCGjogis.dll
同目录,即可运行。