zoukankan      html  css  js  c++  java
  • 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)MicrosoftILMerge>ilmerge /log /t:dll /out:D: empmyexcelobatools.dll D:productIloliDllIloliDllinDebugNPOI.dll D:productIloliDllIloliDllinDebugIloliDll.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,这样直观的多,也容易升级维护.

  • 相关阅读:
    苹果快速的修复了Mac OS High Sierra 上出现了root的漏洞
    Codeforces Round #525 (Div. 2) C. Ehab and a 2-operation task
    2018CHD-ACM新生赛(正式赛)E.解救迷茫的草滩小王子
    2018CHD-ACM新生赛(正式赛)D.刀塔大师lwq I
    2018CHD-ACM新生赛(正式赛)C.绝望のRevue
    最小生成树——克鲁斯克算法+一道例题
    求连通分量个数+判定二分图
    动态规划——滚动数组(省内存)
    [BZOJ 1491] [NOI 2007] 社交网络
    SPOJ 8222 Substrings 后缀自动机
  • 原文地址:https://www.cnblogs.com/DswCnblog/p/5452322.html
Copyright © 2011-2022 走看看