ILMerge下載:
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=17630
網友1:http://www.cnblogs.com/margiex/archive/2005/12/22/302329.html
年初的一篇文章中提到過一下:
http://margiex.cnblogs.com/archive/2005/01/31/100104.html
現在已經支持.net 2.0的版本了. 最近由於開發一個客戶端程序用到多個DLL, 因此考慮使用ILMERGE來合並成一個, 這兩天試了一下. 一個簡單的示例如下:
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: 指定輸出組件的類型,有DLL/EXE/WINEXE; (如果是EXE,則程序在執行的時候將出現一個DOS窗口(即使是WINFORM的程序). 因此應該設置target為winexe)
targetplatform: 輸出組件的.net運行版本;
out: 合並后的組件全名;
后面是主要的被合並的組件名稱, 及相關所有的其它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,這樣直觀的多,也容易升級維護.
網友2:http://www.cnblogs.com/huangcong/archive/2010/03/28/1698973.html
今天做了一個軟件,想發布的時候才發現調用的類沒幾個,就像把它們都跟EXE文件打包在一起,以后復制去別的地方用也方便,於是上網搜了一下,發現網上大部分都是用ILMerge實現的,於是也自己試了一下,不過網上都沒有詳細的步驟演示,我就花點時間做了個教程,方便以后再有人想打包自己的程序,有篇文章可以參考,好了廢話少說,馬上開始:
1.先到http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en下載ILMerge,才600多K,一下子就下好了.
2.下載后是安裝:
3.不到一分鍾就可以安裝完畢:
4.我是安裝在I盤下ILMerge目錄下,以下是安裝后的文件,就一個ILMerge.exe文件而已,我們等會就是用它打包程序的.
5.為了演示,我重新建了個工程,最后生成的是 Main.exe 和 newDll文件,其中newDll是Main.exe 中要引用的Dll文件,為了演示方便,我將它們都復制到了ILMerge的目錄下,現在我們就試着用ILMerge將newDll和Main.exe文件打包起來吧.
6.然后進入dos窗口,進入ILMerge目錄,然后執行下面代碼:
I:\ILMerge\ILMerge.exe /ndebug /target:winexe /out:newclient.exe MainExe.exe /log newDll.dll
7.ILMerge運行時的窗口,此時它正在努力的將Main.exe和newDll文件捆綁在一起:
8.DOS窗口關閉后,我們在去ILMerge目錄下看看,此時已經生成好了我們想要的newclient.exe文件,它就是Main.exe和newDll.dll的結合體啦:
以上實驗在WIN7下.net framework3.5 平台,vs2008環境中測試通過