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