C 版dll 程式集合並工具

2021-09-22 17:09:22 字數 1501 閱讀 6679

最近要開發乙個控制項給同事用,開發中會引用一些第三方dll,這樣交給使用者很不方便,希望的效果是直接交付乙個dll檔案。網上找了一些資料。

1.       使用 costura.fody ,這個強大之處是可以在build階段直接將依賴的dll合併在目標exe中,支援非託管dll進行mixed mode 打包,不足之處是

只能將dll合併到exe中,不支援dll和dll的合併,目前滿足不了我的需求。

參考資料 

costura.fody 是使用場景:最終發布只有乙個exe,將依賴的dll合併到乙個exe中。

2.    微軟的ilmerge工具。

這個支援將exe依賴的dll合併到exe中,也支援將主dll依賴的其他dll合併到乙個dll,這個基本滿足要求,唯一不足之處是沒有gui,每次使用敲命令很不方便,於是繼續尋找,有ilmergegui 。

3.      ilmergegui

4. 自己開發ilmergegui 

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

說明:當主檔案為dll時,合併匯出的檔案為 dll,當主檔案型別為exe 時,合併後的檔案為exe;

. 列表裡面的dll檔案為主檔案的依賴檔案;

clr版本支援v1、v1.1、 v2、v4,注意要與主檔案及相關檔案clr版本一致;

勾選日誌輸出,會在工具目錄生成日誌檔案。

ilmerge關鍵api:

public void setinputassemblies(string assems);

設定輸入的程式集,每一項為程式集包含檔案絕對路徑的全名,其中引數第乙個程式集為主程式集。必須在呼叫merge()之前設定。

public string outputfile  

獲取或設定合併後生成的檔名,必須在呼叫merge()之前設定。 

public void settargetplatform(string platform, string dir);

設定.net framework目標平台,platform引數支援的:"v1", "v1.1", "v2", "v4",第二個引數為mscorlib.dll目錄

public ilmerge.kind targetkind

獲取或設定目標平台型別(windows應用程式、dos應用程式、dll)

public enum kind

dll = 0,

exe = 1,

winexe = 2,

sameasprimaryassembly = 3,

此工具設定為sameasprimaryassembly,即與輸入檔案的主程式集相同。

public void merge();

開始合併。

C 版dll 程式集合並工具

最近要開發乙個控制項給同事用,開發中會引用一些第三方dll,這樣交給使用者很不方便,希望的效果是直接交付乙個dll檔案。網上找了一些資料。1.使用 costura.fody 這個強大之處是可以在build階段直接將依賴的dll合併在目標exe中,支援非託管dll進行mixed mode 打包,不足之...

C 版dll 程式集合並工具

原文 c 版dll 程式集合並工具 最近要開發乙個控制項給同事用,開發中會引用一些第三方dll,這樣交給使用者很不方便,希望的效果是直接交付乙個dll檔案。網上找了一些資料。1.使用 costura.fody 這個強大之處是可以在 build 階段直接將依賴的 dll合併在目標 exe中,支援非託管...

C 版dll 程式集合並工具

最近要開發乙個控制項給同事用,開發中會引用一些第三方dll,這樣交給使用者很不方便,希望的效果是直接交付乙個dll檔案。網上找了一些資料。1.使用 costura.fody 這個強大之處是可以在build階段直接將依賴的dll合併在目標exe中,支援非託管dll進行mixed mode 打包,不足之...