最近要開發一個控件給同事用,開發中會引用一些第三方DLL,這樣交給用戶很不方便,但願的效果是直接交付一個DLL文件。網上找了一些資料。html
1. 使用 Costura.Fody ,這個強大之處是能夠在build階段直接將依賴的DLL合併在目標EXE中,支持非託管DLL進行mixed mode 打包,不足之處是git
只能將DLL合併到EXE中,不支持DLL和DLL的合併,目前知足不了個人需求。github
參考資料 http://www.cnblogs.com/instance/archive/2015/10/09/4863811.html工具
Costura.Fody github地址:https://github.com/Fody/Costuraui
Costura.Fody 是使用場景:最終發佈只有一個EXE,將依賴的DLL合併到一個EXE中。spa
2. 微軟的ILMerge工具。.net
下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=17630日誌
這個支持將EXE依賴的DLL合併到EXE中,也支持將主DLL依賴的其餘DLL合併到一個DLL中,這個基本知足要求,惟一不足之處是沒有GUI,每次使用敲命令很不方便,因而繼續尋找,有ILMergeGUI 。code
3. ILMergeGUIorm
地址:http://ilmergegui.codeplex.com/
這個代碼下載下來編譯都不經過,也很差用,看來仍是本身動手豐衣足食。
4. 本身開發ILMergeGUI
微軟的ILMerge須要安裝才能使用,結合Costura.Fody能夠將ILMerge合併到本身開發的工具中,而且無需安裝ILMerge.
說明:
1. 當主文件爲dll時,合併導出的文件爲 DLL,當主文件類型爲exe 時,合併後的文件爲exe;
2. . 列表裏面的dll文件爲主文件的依賴文件;
3. CLR版本支持v1、v1.1、 v2、v4,注意要與主文件及相關文件CLR版本一致;
勾選日誌輸出,會在工具目錄生成日誌文件。
ILMerge關鍵API:
public void SetInputAssemblies(string[] assems);
設置輸入的程序集,每一項爲程序集包含文件絕對路徑的全名,其中參數第一個程序集爲主程序集。必須在調用Merge()以前設置。
public string OutputFile { get; set; }
獲取或設置合併後生成的文件名,必須在調用Merge()以前設置。
public void SetTargetPlatform(string platform, string dir);
設置.net framework目標平臺,platform參數支持的:"v1", "v1.1", "v2", "v4",第二個參數爲mscorlib.dll目錄
public ILMerge.Kind TargetKind { get; set; }
獲取或設置目標平臺類型(Windows應用程序、DOS應用程序、DLL)
public enum Kind
{
Dll = 0,
Exe = 1,
WinExe = 2,
SameAsPrimaryAssembly = 3,
}
此工具設置爲SameAsPrimaryAssembly,即與輸入文件的主程序集相同。
public void Merge();
開始合併。
工具下載:http://files.cnblogs.com/files/sndnnlfhvk/ILMergeGUI.zip
源碼下載:http://files.cnblogs.com/files/sndnnlfhvk/ILMergeGUICode.zip