使用Costura.Fody工具將源DLL合併到目標EXE筆記

AlexChow發表於2023-03-06

1.專案

https://github.com/Fody/Costura

2.安裝

Install-Package Costura.Fody -Version 1.6.2

3.反射相關

Assembly.LoadFrom("someLibs.dll").GetType("xxx") 找不到檔案

改為 Assembly.Load("someLibs").GetType("xxx")

4.升級包

上一版本升級檔案包是零散的dll形式,這次使用了Costura.Fody合併,如果直接覆蓋主程式執行檔案,執行的時侯還是會優先使用目錄裡的dll檔案,造成還是使用老版本dll, 我的做法是執行程式之前用升級檔案包功能執行命令清除無用的dll檔案,例如bat檔案直接批處理

如果上一版是使用安裝程式安裝的帶校驗檔案刪除自動恢復的那就更糟糕了,必須得編輯配置檔案FodyWeavers.xml指明不合並那幾個dll檔案

我使用的配置大概如下:

  1. 不包含debug符號
  2. dll解壓到臨時資料夾,有些功能需要dll物理檔案
  3. 排除幾個上面說的"帶校驗檔案刪除自動恢復的DLL"
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
  <Costura IncludeDebugSymbols='false' CreateTemporaryAssemblies='true'>
    <ExcludeAssemblies>
      Microsoft.ReportViewer.Common
      Microsoft.ReportViewer.DataVisualization
      Microsoft.ReportViewer.ProcessingObjectModel
      Microsoft.ReportViewer.WinForms
    </ExcludeAssemblies> 
  </Costura>

</Weavers>

參考文章

使用Costura.Fody工具將源DLL合併到目標EXE
https://www.cnblogs.com/cncc/p/7804511.html

相關文章