ilmerge工具合并多个DLL或EXE

这是一个微软提供的合并多个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,这样直观的多,也容易升级维护.

时间: 2024-10-10 10:35:20

ilmerge工具合并多个DLL或EXE的相关文章

ILMerge合并多个DLL

序言 如果你的项目要提供多个dll给别人用,那么不妨让你的dll合并为一个,让别人看起来简洁,引用起来不会过于繁琐. 本篇比较少,但也算是比较实用吧. 下载微软的辅助工具ILMerge Imerge下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=17630 下载完,傻瓜式下一步. 合并多个Dll 场景:C盘有2个dll,分别为: C:\A.dll ,C:\B.dll 结果:合并为C:\C.dll 具体操作: 首先我的IL

C# 合并DLL, 合并DLL进入EXE

原文:C# 合并DLL, 合并DLL进入EXE 使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge /ndebug /t:dll /log c:/1/DevExpress.Data.v7.3.dll c:/1/DevExpress.OfficeSkins.v7.3.dll c:/1/DevExpress.Utils.v7.3.dll c:/1/log4net.dll /out:c:/1/kkun/Tstrin

ILMerge合并多个DLL (转)

序言 如果你的项目要提供多个dll给别人用,那么不妨让你的dll合并为一个,让别人看起来简洁,引用起来不会过于繁琐. 本篇比较少,但也算是比较实用吧. 下载微软的辅助工具ILMerge Imerge下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=17630 下载完,傻瓜式下一步. 合并多个Dll 场景:C盘有2个dll,分别为: C:\A.dll ,C:\B.dll 结果:合并为C:\C.dll 具体操作: 首先我的IL

向自己的模块添加错误代码_使用vc自带的工具MC创建资源并将其添加至DLL或EXE中

本文主要介绍怎么使用Visual Studio自带的MC.exe工具来创建一个消息资源并将其添加到自己的DLL(或.exe)中,从而达到为自己的模块添加错误代码的目的. 一.MC工具介绍 Message Compiler(MC) 是用来创建消息资源的工具,这些消息资源被DLL(或EXE)模块引用.MC的输入是一个特定格式的文本文件,即*.mc文件,这种特定格式使得在一个文件中定义多种语言支持变得非常容易. 当编写完成一个*.mc文件之后,为了在程序中使用这个文件,你需要一些操作.首先,使用MC工

关于DLL调试的两个工具(dependency walker和dumpbin.exe)

Dependency Walker工具: 该工具用来查看dll依赖库和依赖库内的函数. 左上角:模块依赖树,表示该dll所依赖的其它dll文件 右上角:导入函数,即与当前根模块有关系的函数(即根模块或根模块的子模块使用到的模块) 右中间:导出函数,即当前模块所有可以导出的函数(即可以被外界调用的函数). 下面:模块列表视图,用于显示所依赖的dll模块的信息,如果加载错误会红色标出 最下面:日志视图,显示出错模块的信息 具体查看:如何使用查看DLL神器DependencyWalker 另一篇文章生

C#中将dll汇入exe z

用了3层架构,运行目录下有很多dll文件,最终发布时,我打算将dll文件都合并到exe文件中去.微软发布的免费软件ILmerge可以完成这项工作,研究了一下,其用法如下: 1.合并file1.dll.file2.dll到destination.dll ILmerge /ndebug /target:dll /out:C:\destination.dll /log C:\file1.dll C:\file2.dll 2.合并file1.dll.file2.dll以及myApp.exe到newApp

c#合并多个dll文件到目标

今天想整理一下最近写过的代码,想把常用功能打包成dll,方便后续使用,但是一个Library build出来之后一堆依赖dll,这样不方便在接下的项目使用,于是就在网上搜索,发现了一个好工具,不用写一行代码就可轻松实现合并多个dll,当然build的时候还会产生出依赖的dll,但引用的时候可以不考虑这些依赖,一款名为Fody.Costura的工具.Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS自己的工程中.安装之后,rebuild一下,就可以将项目所有依赖的DLL

使用Visual Studio自带工具dumpbin查看动态链接库(.dll)导出函数

当我们需要查看一个dll或exe文件中的包含的函数或是依赖的函数之类的信息,可以使用Visual Studio自带的工具dumpbin来实现,使用方法为: 1/ 启动Visual Studio 命令行工具: 2/ 查看导出函数,执行 dumpbin /exports (dll或者exe文件路径) 3/ 查看依赖性,执行 dumpbin /dependents (dll或者exe文件路径) 4/ 可以使用 /out:(文件名)参数将打印信息输出到文本文件中.

比较.NET程序集(DLL或EXE)是否相同

如何比较两个.NET程序集(DLL或EXE)是否相同呢? 直接比较文件内容?当然没那么简单了,这个你可以去试试,去比较一下两次Build产生的程序集, 就算内容没有改变,产生的程序集的二进制文件也是不同的. 其实,当两次Build后,程序集中,有3个地方会不同: MVID值会不同 ImageBase值会不同 时间戳会不同 因此,要比较两个程序集是否完全相同,可以先刨除掉这三个值后,再进行比较. 以下文章中就介绍了该思路的具体实现.我也参考着实现了自己的比较工具,用于日常项目中程序集的比较. ht