.NET 合並程序集(將 dll 合並到 exe 中)


背景:我們的應用程序通常都是由多個程序集組成,例如一個 exe 程序依賴於多個 dll 程序集。在某些情況下,我們希望程序的分發能夠簡單,單獨一個 exe 就能正常運行。這種情況下,就需要將 dll 依賴項合並到 exe 主程序中。

本文章給大家講下非常好用的NuGet 包,Costura.Fody

1.第一步:通過 NuGet 安裝 Costura.Fody 和 Fody

Costura.Fody 是 Fody 中的工具(加載項)之一,通常情況下只需安裝前者即可,后者會自動安裝。

這這邊先添加一個Newtonsoft.Json的包做實驗,讓結果看到更明顯,后面有后面有生成前后的對比

第二步:添加 FodyWeavers.xml 文件

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura>
    <ExcludeAssemblies>
      Foo
      Bar
    </ExcludeAssemblies>
  </Costura>
</Weavers>

  

第三步:編譯項目

編譯你的項目,看一下Debug輸出目錄,dll 是不是合並了

普通生成:

Costura.Fady生成:

從兩張圖片我們可以發現Newtonsoft的相關文件已經合並了,WindowsFormsApp1.exe的大小也發生了變化,從9KB變成了270KB

第四步:FodyWeavers.xml 文件的進階講解

1.ExcludeAssemblies

默認情況下,Costura.Fody 會將所有 Copy Local 的程序集進行合並。ExcludeAssemblies 用於指定不需要合並的程序集,注意文件名中不要后綴。

<Costura>
  <ExcludeAssemblies>
    Foo
    Bar
  </ExcludeAssemblies>
</Costura>

或者

<Costura ExcludeAssemblies='Foo|Bar' />

2.IncludeDebugSymbols

控制是否將程序集的相應 pdb 文件嵌入,默認值為 true 。

<Costura IncludeDebugSymbols='false' />

3.CreateTemporaryAssemblies

在程序運行時,將被嵌入的程序集生成到本地,默認值為 false 。如果該程序集的正常運行依賴於其物理地址,一定要啟用此功能。

<Costura CreateTemporaryAssemblies='true' />

4.DisableCleanup

默認情況下,被嵌入的程序集將從編譯的輸出目錄中清除,可通過該屬性來禁用清理。

<Costura DisableCleanup='true' />

5.非托管程序集的嵌入

<Costura Unmanaged32Assemblies='Foo32|Bar32' Unmanaged64Assemblies='Foo64|Bar64'/>

6.本地庫和預加載順序

<Costura PreloadOrder='Foo|Bar' />

 


免責聲明!

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



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