使用Costura.Fody工具将源DLL合并到目标EXE笔记

时间:2022-12-23 00:40:31

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