將WinForm程序(含多個非托管Dll)合並成一個exe的方法


開發程序的時候經常會引用一些第三方的DLL,然后編譯生成的exe文件就不能脫離這些DLL獨立運行了。

ILMerge能把托管dll跟exe合並起來生成一個新的exe,但是當我們在項目中使用了非托管的dll,也就是使用了第三方dll時,合並雖然成功但是卻無法運行,提示“不是有效的win32應用程序

這時候我們需要用到一款名為Fody.Costura的工具。Fody.Costura是一個Fody框架下的插件,可通過Nuget安裝到VS工程中。安裝之后,就可以將項目所依賴的DLL(甚至PDB)文件全部打包到EXE文件里

使用方法

  1. 在VS中,通過Nuget為目標EXE工程安裝Costura.Fody。
  2. 安裝成功后重啟vs,然后重新生成

重新生成完成后,到項目的輸出目錄下找到新生成的EXE文件,你同時會發現輸出目錄下仍然存在那些DLL。不過不用擔心,這個EXE已經能夠獨立運行了。你可以把這些DLL全部刪除后再運行EXE試試。

另外,Fody.Costura還支持一些進階的特性,例如:

  • 臨時程序集文件:在運行EXE前自動,自動將DLL從EXE中解壓到文件夾系統中,再通過常規的方式加載該DLL。
  • 合並非托管的DLL:Fody.Costura可以合並非托管的DLL,但是不會自動合。如果你的程序涉及非托管DLL,那么你需要通過修改Fody.Costura的配置文件來顯示地告訴它你想合並哪些非托管的DLL。
  • 預加載DLL:Fody.Costura可以幫助你在程序啟動時預先加載某些DLL,你甚至可以指定這些DLL的加載順序。

以上這些進階特性都需要你通過修改Fody.Costura的配置文件來實現,具體的操作步驟可以參考它的官方文檔


免責聲明!

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



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