C# 版dll 程序集合並工具


C# 版dll 程序集合並工具

     最近要開發一個控件給同事用,開發中會引用一些第三方DLL,這樣交給用戶很不方便,希望的效果是直接交付一個DLL文件。網上找了一些資料。

 1.       使用 Costura.Fody ,這個強大之處是可以在build階段直接將依賴的DLL合並在目標EXE中,支持非托管DLL進行mixed mode 打包,不足之處是

只能將DLL合並到EXE中,不支持DLLDLL的合並,目前滿足不了我的需求。

參考資料 http://www.cnblogs.com/instance/archive/2015/10/09/4863811.html

Costura.Fody    github地址:https://github.com/Fody/Costura

      Costura.Fody 是使用場景:最終發布只有一個EXE,將依賴的DLL合並到一個EXE中。

 

2.    微軟的ILMerge工具。

下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=17630

這個支持EXE依賴的DLL合並到EXE中,也支持將主DLL依賴的其他DLL合並到一個DLL,這個基本滿足要求,唯一不足之處是沒有GUI,每次使用敲命令很不方便,於是繼續尋找,有ILMergeGUI

 

3.      ILMergeGUI

地址:http://ilmergegui.codeplex.com/

這個代碼下載下來編譯都不通過,也不好用,看來還是自己動手豐衣足食。

 

4. 自己開發ILMergeGUI 

微軟的ILMerge需要安裝才能使用,結合Costura.Fody可以將ILMerge合並到自己開發的工具中,並且無需安裝ILMerge.

 

 

說明:

1.        當主文件為dll時,合並導出的文件為 DLL,當主文件類型為exe 時,合並后的文件為exe;

2.      . 列表里面的dll文件為主文件的依賴文件;

3.        CLR版本支持v1v1.1 v2v4,注意要與主文件及相關文件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

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM