ilmerge工具合并多个DLL或EXE
2016-07-06 11:28
302 查看
这是一个微软提供的合并多个DLL 或是将DLL合并进EXE的工具
首先下载这个工具:ilmerge
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=17630
合并成DLL:
C:\Program Files (x86)\Microsoft\ILMerge>ilmerge /log /t:dll /out:D:\temp\myexcel\bobatools.dll D:\product\IloliDll\IloliDll\bin\Debug\NPOI.dll D:\product\IloliDll\IloliDll\bin\Debug\IloliDll.dll
(最后二个是要合并的源文件,多个源文件之间用空隔隔开。在DLL合并过程中可能自己写的DLL会要用到这个ICSharpCode.SharpZipLib.dll,这个DLL 是DLL项目生成后会与DLL文件在同一目录下的。如果没有这个文件请重新生成你的DLL项目,以便出这个ICSharpCode.SharpZipLib.dll文件,否则合并可能失败)
合并成EXE:
ilmerge /ndebug /target:exe /targetplatform:v1.1 /out:newclient.exe oldclient.exe /log AutoUpdater.dll DockingSuite.dll DocumentManager.dll FileHelpers.dll OutlookBar.dll
SandBar.dll ICSharpCode.SharpZipLib.dll
解释如下:
/target: [必须有的选项]可以简写为 /t: 指定输出组件的类型,有DLL/EXE/WINEXE; (如果是EXE,则程序在执行的时候将出现一个DOS窗口(即使是WINFORM的程序). 因此应该设置target为winexe)
/targetplatform:[可以没有] 输出组件的.net运行版本;
/out: [必须有的选项]合并后的组件全名;
/log: [可以没有] 屏幕上显示过程日志
后面是主要的被合并的组件名称, 及相关所有的其它DLL;
上面的示例只是合并为EXE, 也可以多个DLL合并成一个DLL使用, 各自的命名空间不会改变;
1. 不能合并interop这种由COM转换过来的DLL; (可以合并,但相关依赖的DLL必须也一起合并, 第一次合并的时候只有Excel.dll,总是报错,以为是interop的缘故,后来才发现是没有合并vbide.dll的缘故,复制到目录再一起合并,一切OK.)
2. 如果有资源DLL, 应该将要被合并的oldclient.exe先改为别的名称,然后合并后的输出命名为:oldclient.exe,因为资源文件名是:oldclient.resources.dll,而ILMERGE不能合并资源文件,否则在导出后将找不到此资源文件。(如果哪位知道如何合并资源文件,请指教,谢谢)
3. 虽然合并后的EXE比较大,但在用户那里只有一个EXE,这样直观的多,也容易升级维护.
顶0
踩
首先下载这个工具:ilmerge
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=17630
合并成DLL:
C:\Program Files (x86)\Microsoft\ILMerge>ilmerge /log /t:dll /out:D:\temp\myexcel\bobatools.dll D:\product\IloliDll\IloliDll\bin\Debug\NPOI.dll D:\product\IloliDll\IloliDll\bin\Debug\IloliDll.dll
(最后二个是要合并的源文件,多个源文件之间用空隔隔开。在DLL合并过程中可能自己写的DLL会要用到这个ICSharpCode.SharpZipLib.dll,这个DLL 是DLL项目生成后会与DLL文件在同一目录下的。如果没有这个文件请重新生成你的DLL项目,以便出这个ICSharpCode.SharpZipLib.dll文件,否则合并可能失败)
合并成EXE:
ilmerge /ndebug /target:exe /targetplatform:v1.1 /out:newclient.exe oldclient.exe /log AutoUpdater.dll DockingSuite.dll DocumentManager.dll FileHelpers.dll OutlookBar.dll
SandBar.dll ICSharpCode.SharpZipLib.dll
解释如下:
/target: [必须有的选项]可以简写为 /t: 指定输出组件的类型,有DLL/EXE/WINEXE; (如果是EXE,则程序在执行的时候将出现一个DOS窗口(即使是WINFORM的程序). 因此应该设置target为winexe)
/targetplatform:[可以没有] 输出组件的.net运行版本;
/out: [必须有的选项]合并后的组件全名;
/log: [可以没有] 屏幕上显示过程日志
后面是主要的被合并的组件名称, 及相关所有的其它DLL;
上面的示例只是合并为EXE, 也可以多个DLL合并成一个DLL使用, 各自的命名空间不会改变;
1. 不能合并interop这种由COM转换过来的DLL; (可以合并,但相关依赖的DLL必须也一起合并, 第一次合并的时候只有Excel.dll,总是报错,以为是interop的缘故,后来才发现是没有合并vbide.dll的缘故,复制到目录再一起合并,一切OK.)
2. 如果有资源DLL, 应该将要被合并的oldclient.exe先改为别的名称,然后合并后的输出命名为:oldclient.exe,因为资源文件名是:oldclient.resources.dll,而ILMERGE不能合并资源文件,否则在导出后将找不到此资源文件。(如果哪位知道如何合并资源文件,请指教,谢谢)
3. 虽然合并后的EXE比较大,但在用户那里只有一个EXE,这样直观的多,也容易升级维护.
顶0
踩
相关文章推荐
- Java 常用API的运用,效率及技巧
- jQuery-searchableSelect(下拉搜索框)
- java加密技术一(单向加密算法)
- Merge k Sorted Lists
- URAL 1309 Dispute <函数关系的递推>
- CSS布局之圣杯布局和双飞翼布局
- 【leetcode】264. Ugly Number II【M】【15】
- UML的六种关系
- poj 2823 Sliding Window 题解
- Delphi 设置时间格式
- bootstrap-table.js如何根据单元格数据不同显示不同的字体的颜色
- 剑指Offer:面试题13——在O(1)时间删除链表结点
- sql 金额以千分位逗号方式显示
- Springmvc中@RequestParam传值中文乱码解决方案
- cobbler的使用安装
- TOP-K问题-堆排序和快排实现
- InnoDB: The log sequence number in ibdatafiles does not match the log sequence number in the ib_log
- Android中资源文件用法简单示例
- qt 5.6+mingw 编译安装QWT
- <学习笔记> HttpClient工具类