背景:我們的應用程式通常都是由多個程式集組成,例如一個 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' />
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/33181.html
標籤:C#
上一篇:WinDbg排查CPU高的問題
下一篇:C#設計模式之訂閱發布模式
