1. 程式人生 > >.NET 合併程式集(將 dll 合併到 exe 中)

.NET 合併程式集(將 dll 合併到 exe 中)

.NET 合併程式集(將 dll 合併到 exe 中)

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

本文將給大家介紹一款能將 .NET 程式集進行合併的工具 Costura.Fody ,它是一個 NuGet 包,能在程式編譯時將其依賴項作為資源嵌入到主程式中。本文主要介紹使用方法,關於它的實現原理,可以參考:

使用方法

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

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

第二步:新增 FodyWeavers.xml 檔案

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

Costura 有許多引數可以配置,將在下一節介紹。

第三步:編譯專案

編譯你的專案,看一下輸出目錄,dll 是不是不見了? exe 是不是變大了?

部分配置項說明

ExcludeAssemblies

預設情況下,Costura.Fody 會將所有 Copy Local 的程式集進行合併。ExcludeAssemblies 用於指定不需要合併的程式集,注意檔名中不要字尾。

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

或者

<Costura ExcludeAssemblies='Foo|Bar' />

IncludeDebugSymbols

控制是否將程式集的相應 pdb 檔案嵌入,預設值為 true

<Costura IncludeDebugSymbols='false' />

CreateTemporaryAssemblies

在程式執行時,將被嵌入的程式集生成到本地,預設值為 false 。如果該程式集的正常執行依賴於其實體地址,一定要啟用此功能。

<Costura CreateTemporaryAssemblies='true' />

DisableCleanup

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

<Costura DisableCleanup='true' />

高階使用

  • 非託管程式集的嵌入
<Costura Unmanaged32Assemblies='Foo32|Bar32' Unmanaged64Assemblies='Foo64|Bar64'/>
  • 本地庫和預載入順序
<Costura PreloadOrder='Foo|Bar' />

參考資料