ILMerge将winform程序打包成一个单文件可执行exe

来源:互联网 发布:spring 源码书籍推荐 编辑:程序博客网 时间:2024/06/16 12:56

去这里下载:

这里下载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\Wu\Desktop\Baidu\BaiduAPITest\bin\Debug\qqq.exe C:\Users\Wu\Desktop\Baidu\BaiduAPITest\bin\Debug\BaiduAPITest.exe C:\Users\Wu\Desktop\Baidu\BaiduAPITest\bin\Debug\Newtonsoft.Json.dll

ILMerge使用,dll类库合并

最近做了一个数据成图组件,是对一个com控件的二次开发。

该com控件是个窗体控件在使用过程中自动生成了以AxInterop开头的AxInterop.****.dll和以Interop.开头的Interop.****.dll两个中间类,而这两个类放置的位置必须与最终的窗体同目录。

我开发的.net组件名称为:DCGjogis.dll,假设调用该组件生成的windows窗体程序为AAA.exe,要求AAA.exeDCGjogis.dll同目录,因此结果就是,该目录下包含4个文件,分别为:AAA.exe,DCGjogis.dll,AxInterop.****.dll,Interop.****.dll

而要求是该目录下只能包含AAA.exe,DCGjogis.dll两个文件,剩余的AxInterop.****.dllInterop.****.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同目录,即可运行。