C# 版dll 程序集合并工具

最近要开发一个控件给同事用,开发中会引用一些第三方DLL,这样交给用户很不方便,希望的效果是直接交付一个DLL文件。网上找了一些资料。

1.       使用 Costura.Fody ,这个强大之处是可以在build阶段直接将依赖的DLL合并在目标EXE中,支持非托管DLL进行mixed mode 打包,不足之处是

只能将DLL合并到EXE中,不支持DLL和DLL的合并,目前满足不了我的需求。

参考资料 http://www.cnblogs.com/instance/archive/2015/10/09/4863811.html

Costura.Fody    github地址:https://github.com/Fody/Costura

Costura.Fody 是使用场景:最终发布只有一个EXE,将依赖的DLL合并到一个EXE中。

2.    微软的ILMerge工具。

下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=17630

这个支持将EXE依赖的DLL合并到EXE中,也支持将主DLL依赖的其他DLL合并到一个DLL,这个基本满足要求,唯一不足之处是没有GUI,每次使用敲命令很不方便,于是继续寻找,有ILMergeGUI 。

3.      ILMergeGUI

地址:http://ilmergegui.codeplex.com/

这个代码下载下来编译都不通过,也不好用,看来还是自己动手丰衣足食。

4. 自己开发ILMergeGUI

微软的ILMerge需要安装才能使用,结合Costura.Fody可以将ILMerge合并到自己开发的工具中,并且无需安装ILMerge.

说明:

1.       当主文件为dll时,合并导出的文件为 DLL,当主文件类型为exe 时,合并后的文件为exe;

2.      . 列表里面的dll文件为主文件的依赖文件;

3.       CLR版本支持v1、v1.1、 v2、v4,注意要与主文件及相关文件CLR版本一致;

勾选日志输出,会在工具目录生成日志文件。

ILMerge关键API:

public void SetInputAssemblies(string[] assems);

设置输入的程序集,每一项为程序集包含文件绝对路径的全名,其中参数第一个程序集为主程序集。必须在调用Merge()之前设置。

public string OutputFile { get; set; }

获取或设置合并后生成的文件名,必须在调用Merge()之前设置。

public void SetTargetPlatform(string platform, string dir);

设置.net framework目标平台,platform参数支持的:"v1", "v1.1", "v2", "v4",第二个参数为mscorlib.dll目录

public ILMerge.Kind TargetKind { get; set; }

获取或设置目标平台类型(Windows应用程序、DOS应用程序、DLL)

public enum Kind

{

Dll = 0,

Exe = 1,

WinExe = 2,

SameAsPrimaryAssembly = 3,

}

此工具设置为SameAsPrimaryAssembly,即与输入文件的主程序集相同。

public void Merge();

开始合并。

工具下载:http://files.cnblogs.com/files/sndnnlfhvk/ILMergeGUI.zip

源码下载:http://files.cnblogs.com/files/sndnnlfhvk/ILMergeGUICode.zip

C# 版dll 程序集合并工具的更多相关文章

  1. 把C#程序(含多个Dll)合并成一个Exe的超简单方法

    开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超 ...

  2. 把C#程序(含多个Dll)合并打包成单一文件

    实现的方式有多种. 1 Mono 项目中有一个工具,mono的一个附属工具mkbundle.(在Xamarin未被收购开源前,它是加密的商业软件.http://www.cnblogs.com/bins ...

  3. C#程序(含多个Dll)合并成一个Exe

    把C#程序(含多个Dll)合并成一个Exe的超简单方法   开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一 ...

  4. 将WinForm程序(含多个非托管Dll)合并成一个exe的方法

    原文:将WinForm程序(含多个非托管Dll)合并成一个exe的方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. ILMerge能把托管dl ...

  5. 转载:.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法

    .Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法 阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集 ...

  6. 利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)

    原文:利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe) 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了.这 ...

  7. .NET 程序集单元测试工具 SmokeTest 应用指南

    Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke Test的自动化,可借用虚拟机的snapshot机 ...

  8. 制作dll自动注册工具

    记录一个简单的dll自动注册工具制作:主要用到的是DllRegisterServer()方法,其实我们平常注册dll文件内部都会调用这个方法. 这里我就直接写在主程序里面了,需要注意的地方也直接在代码 ...

  9. Metrics-Java版的指标度量工具之二

    接上<Metrics-Java版的指标度量工具之一> 4.       Histograms Histograms主要使用来统计数据的分布情况,最大值.最小值.平均值.中位数,百分比(75 ...

随机推荐

  1. LintCode "Digit Counts" !!

    Lesson learnt: one effective solution for bit\digit counting problems: counting by digit\bit http:// ...

  2. datagridview 列位置 设置顺序与加载显示顺序不一致

    因为: dgv.AutoGenerateColumns = false;//禁止自动生成列 该属性是在 dgvJdmx.DataSource = dt; 之后设置的原因. 将两者调换,即可.

  3. Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存

    Nginx地址重写 Nginx rewrite rewrite语法规则1).变量名可以使用 "=" 或 "!=" 运算符~ 区分大小写~* 不区分大小写^~ 禁 ...

  4. 黄聪:WordPress图片插件:Auto Highslide修改版(转)

    一直以来很多人都很喜欢我博客使用的图片插件,因为我用的跟原版是有些不同的,效果比原版的要好,他有白色遮罩层,可以直观的知道上下翻图片和幻灯片放映模式.很多人使用原版之后发现我用的更加帅一些,于是很多人 ...

  5. Apache+php在windows下的安装和配置

    下载和配置php   下载php:http://windows.php.net/download/  php-5.4.16-Win32-VC9-x86.zip  下载apache: http://ht ...

  6. hibernate 组件(Component)映射

    1.类Teacher public class Teacher { private int id; private String name; private String sex; private A ...

  7. PLSQL_闪回操作4_Flashback Drop

    2014-06-25 Created By BaoXinjian

  8. iis7+php5.6配置404错误页面的问题

    打开错误页,如图1 图1 1.刚开始选择的是“在此网站上执行URL”,/404.html页面可以显示出来,但返回的状态是200,对seo不友好,这样生成的的web.config配置文件如下: < ...

  9. ylbtech-Unitity-CS:AnonymousDelegates

    ylbtech-Unitity-CS:AnonymousDelegates 1.A,效果图返回顶部   1.B,源代码返回顶部 1.B.1, using System; using System.Co ...

  10. Python语言快速入门

    Python的主提示符(>>>):是解释器告诉你它正在等待你输入的下一个语句 Python的次提示符(...):告诉你解释器正在等待你输入当前语句的其他部分 [简介] Python( ...