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,這樣直觀的多,也容易升級維護.


0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章