.NET 合并程序集(将 dll 合并到 exe 中)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Iron_Ye/article/details/83961266

.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' />

参考资料

猜你喜欢

转载自blog.csdn.net/Iron_Ye/article/details/83961266