背景:我们的应用程序通常都是由多个程序集组成,例如一个 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' />

.NET 合并程序集(将 dll 合并到 exe 中)的更多相关文章

  1. .NET Winform 将引用的dll文件集成到exe中(转)

    Winform程序经常需要引用一些第三方dll文件,这些dll在发布后与exe文件保存在同一目录下,虽然将dll文件集成到exe中会增大文件尺寸,但程序目录会相对整洁. 下面介绍一种比较简单的集成方法 ...

  2. vs 如何将dll打包到exe中

    方法如下:首先需要安装NuGet 然后安装Fody.Costura 重新启动vs 编译项目即可 虽然根目录下还生成了dll但是你的程序已经可以脱离dll运行了,其实是将你的dll打入了exe中你可以看 ...

  3. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  4. C# 合并DLL, 合并DLL进入EXE 【转】

    使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge /ndebug /t:dll /log c:/1/ ...

  5. C# 合并DLL, 合并DLL进入EXE

    原文:C# 合并DLL, 合并DLL进入EXE 使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge / ...

  6. 多个DLL合并,DLL合并到EXE

    1:) 下载 http://download.microsoft.com/download/1/3/4/1347C99E-9DFB-4252-8F6D-A3129A069F79/ILMerge.msi ...

  7. [C#]使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)

    本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EXE,因此,需要下载以下工具: https://www.micro ...

  8. [C#]使用Costura.Fody将源DLL合并到目标EXE

    本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...

  9. ILMerge将源DLL合并到目标EXE

    ILMerge将源DLL合并到目标EXE(.NET4.6.2) 本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EX ...

随机推荐

  1. Python 删除含有只读文件(夹)的文件夹

    def rm_read_only(fn, tmp, info): if os.path.isfile(tmp): os.chmod(tmp, stat.S_IWRITE) os.remove(tmp) ...

  2. Spring5参考指南:事件Event

    文章目录 基于继承的Event 基于注解的Event 异步侦听器 Spring提供了很方便的事件的处理机制,包括事件类ApplicationEvent和事件监听类ApplicationListener ...

  3. Django入门2:路由系统

    1.单一路由对应 url(r'^index/', views.index), # FBV url(r'^home/', views.Home.as_view()), # CBV 2.基于正则的路由 u ...

  4. 深入认识CSS的块级元素

    2019独角兽企业重金招聘Python工程师标准>>> 块级元素: 显示在一块内,会自动换行,元素会从上到下垂直排列,各自占一行.每个块级元素默认占一行高度,一行内添加一个块级元素后 ...

  5. Eclipse Collections:让Java Streams更上一层楼

    \ 关键要点 \\ Eclipse Collections是一个高性能的Java集合框架,为原生JDK集合增加了丰富的功能.\\t Streams是JDK的一个非常受欢迎的功能,但它缺少了一些特性,严 ...

  6. Oliver Twist

    对于济贫院那些绅士们而言,贫民好吃懒做.贪得无厌.他们消耗的食物即是对教区最大的威胁. 绅士们的利益得不到满足时,孤儿们只能被驱之而后快,甚至被"加价出售". 然而,眼泪这种东西根 ...

  7. 基于tp3开发的cms-前台代码执行

        内核 thinkphp PbootCMS-V1.2.1 ├─ apps         应用程序 │  ├─ admin     后台模块 │  ├─ api       api模块 │  ├ ...

  8. 【大数据 Spark】利用电影观看记录数据,进行电影推荐

    利用电影观看记录数据,进行电影推荐. 目录 利用电影观看记录数据,进行电影推荐. 准备 1.任务描述: 2.数据下载 3.部分数据展示 实操 1.设置输入输出路径 2.配置spark 3.读取Rati ...

  9. C语言进阶_变量属性

    人们总说时间会改变一些,但实际上这一切还得你自己来. 一.概念详解 变量:计算机语言中储存计算结果,其值可以被修改.通过变量名来访问计算机中一段连续的内存空间. 属性:区别于同类事物的特征. C语言中 ...

  10. SQLserver分库分表

    https://blog.csdn.net/ExceptionalBoy/article/details/78851327