close

在上篇文章中可以發現,應用程式通常依賴許多外部 DLL 檔案(動態連結庫)來實現功能。

然而,當應用程式需要部署時,帶著一堆 DLL 檔案顯得繁瑣且容易出現 DLL 遺失或版本不符的問題。

這篇文章將教大家如何使用 FodyCostura.Fody,將所有 DLL 合併到單一的 EXE 檔案中,打造方便攜帶的單檔應用程式。

這篇小弟認為含金量很高所以不免俗的...求個贊助@@
程式分享 隨機數字亂數產生器(求斗內)街口支付

C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行有再用虛擬貨幣的話USDT(選BEP20)
或是直接轉帳
 

812(台新)
帳號:28881005389395

再次強調金額不拘,但還請各位踴躍斗內贊助QQ

 

 

 

什麼是 Fody 和 Costura.Fody?

在進入教學之前,我們先來認識兩個關鍵工具:

Fody

Fody 是一個強大的編譯後處理工具,允許我們在編譯完成後對程式的 IL(中間語言)進行加工和擴展。Fody 提供了一個框架來整合多種功能,並支援使用各種插件完成不同的任務,例如:

  • 自動生成程式碼(如屬性變更通知)。
  • 嵌入資源(如 DLL 或其他檔案)。
  • 改變程式的執行行為。

Costura.Fody

Costura.Fody 是 Fody 的一個插件,專門用來 將外部 DLL 檔案內嵌到主執行檔(EXE 或 DLL)中,讓應用程式可以以單一檔案的形式運行。

  • 功能:

    • 自動將外部 DLL 嵌入到主程式。
    • 內嵌的 DLL 會在程式運行時自動解壓並加載,無需手動處理。
    • 簡化應用程式部署,只需分發一個 EXE 檔案。
  • 適用場景:

    • 攜帶式應用程式(Portable Applications)。
    • 減少外部 DLL 丟失或衝突的風險。
    • 打造乾淨的執行環境。

如何將 DLL 合併到 EXE?完整操作教學

以下是一個完整的操作步驟,教你如何將 DLL 嵌入到 EXE 中。

這邊我就以我上一篇的程式為例


步驟 1:建立專案並添加 DLL

  1. 在 Visual Studio 中建立一個 C# 應用程式專案(例如 Windows Forms 或 Console Application)。
  2. 添加你需要的外部 DLL 檔案(右鍵專案 -> 加入-> 新增現有項目->把專案所有用到的DLL檔全部加入)。
    C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行

步驟 2:安裝 Fody 和 Costura.Fody

  1. 打開 NuGet Package Manager(右鍵專案 -> Manage NuGet Packages)。
  2. 搜尋 Fody 並安裝。
  3. 搜尋 Costura.Fody 並安裝。
    C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行
    C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行記得要去瀏覽搜尋 圖中是我已安裝

步驟 3:配置 FodyWeavers.xml

  1. 在專案的根目錄新增一個名為 FodyWeavers.xml 的檔案。
  2. 在檔案中添加以下內容:
 <?xml version="1.0" encoding="utf-8" ?> 
<Weavers> 
 <Costura /> 
</Weavers> 

這段設定告訴 Fody 使用 Costura 插件來處理 DLL 的內嵌。
C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行
C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行
C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行


步驟 4:確認 DLL 嵌入

  1. 確保"所有" DLL 檔案都被設定為「內嵌資源」。
    C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行
  2. 編譯專案,生成的 EXE 檔案會包含所有的 DLL。

步驟 5:測試程式

  1. 在輸出資料夾(通常是 bin\Debugbin\Release)中找到你的 EXE 檔案。
  2. 將其他 DLL 檔案刪除,直接運行 EXE 檔案進行測試,確認功能是否正常。
    C# 如何將 DLL 合併到 EXE 檔案內,打造單檔可執行可以乾乾淨淨的出現真是太好了@@

常見問題與解答

Q1:DLL 嵌入後,為什麼程式大小變大?

這是正常現象,因為所有的 DLL 都嵌入到 EXE 檔案中了。程式的大小會根據 DLL 的大小增長。

Q2:如何確保嵌入的 DLL 被正確加載?

Costura.Fody 自動處理 DLL 的加載過程,你只需確保 FodyWeavers.xml 的配置正確。

Q3:Costura 支援哪些檔案內嵌?

Costura 不僅支援 DLL,也支援其他資源檔案(如 JSON、XML)。只需將檔案添加到專案,並設為 Embedded Resource


結論

透過 Fody 和 Costura.Fody,你可以輕鬆地將外部 DLL 合併到 EXE 檔案中,減少部署和維護的麻煩。這種方法特別適合需要簡單分發的應用程式,讓程式更加方便攜帶且不易出錯。

希望這篇文章能幫助到你,讓你的程式更加專業!如果有任何疑問,歡迎留言討論! 😊

還有務必大力贊助感恩@@

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 docu2019ment 的頭像
    docu2019ment

    Hsun的自學筆記

    docu2019ment 發表在 痞客邦 留言(0) 人氣()