C# 版dll 程序集合并工具
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 程序集合并工具的更多相关文章
- 把C#程序(含多个Dll)合并成一个Exe的超简单方法
开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超 ...
- 把C#程序(含多个Dll)合并打包成单一文件
实现的方式有多种. 1 Mono 项目中有一个工具,mono的一个附属工具mkbundle.(在Xamarin未被收购开源前,它是加密的商业软件.http://www.cnblogs.com/bins ...
- C#程序(含多个Dll)合并成一个Exe
把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一 ...
- 将WinForm程序(含多个非托管Dll)合并成一个exe的方法
原文:将WinForm程序(含多个非托管Dll)合并成一个exe的方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. ILMerge能把托管dl ...
- 转载:.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法
.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法 阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集 ...
- 利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)
原文:利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe) 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了.这 ...
- .NET 程序集单元测试工具 SmokeTest 应用指南
Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke Test的自动化,可借用虚拟机的snapshot机 ...
- 制作dll自动注册工具
记录一个简单的dll自动注册工具制作:主要用到的是DllRegisterServer()方法,其实我们平常注册dll文件内部都会调用这个方法. 这里我就直接写在主程序里面了,需要注意的地方也直接在代码 ...
- Metrics-Java版的指标度量工具之二
接上<Metrics-Java版的指标度量工具之一> 4. Histograms Histograms主要使用来统计数据的分布情况,最大值.最小值.平均值.中位数,百分比(75 ...
随机推荐
- textarea 限制字数
$("textarea").keyup(function(){ //console.log($(this).val().length); var L=$ ...
- Winform退出程序
1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit(); 强制所有消息中止,退 ...
- IntelliJ IDEA通过Spring配置连接MySQL数据库
先从菜单View→Tool Windows→Database打开数据库工具窗口,如下图所示: 点击Database工具窗口左上角添加按钮"+",选择Import from sour ...
- Python 函数的创建和调用
>>> movies =[ "the holy grail", 1975,"terry jones",91, ["graham ch ...
- Apache+php在windows下的安装和配置
下载和配置php 下载php:http://windows.php.net/download/ php-5.4.16-Win32-VC9-x86.zip 下载apache: http://ht ...
- (WPF, MVVM) Slider Binding.
对于Button的Command的绑定可以通过实现ICommand接口来进行,但是Slider并没有Command属性. 另外如果要实现MVVM模式的话,需要将一些Method和Slider的Even ...
- SecureCRT自动记录日志【记录键入的所有命令和打印的结果信息】
- BEvent_标准控件Event的用法(案例)(待整理)
2014-06-06 Created By BaoXinjian
- git的使用(3) 多分支情况下的pull
当你存在多个分支的时候,你需要pull下来分支上面的内容,你需要指定分支进行同步命令: git pull origin branch (branch 是你的分支的名字)
- STM32中断控制及优先级设置
M3用8bits而STM32用高四位来表示抢占和子优先级:bit=1表示抢占:bit=0表示非抢占即子优先级:所以共有5中方案分组: 分组 Bit7 Bit6 Bit5 Bit4 说明: 第0组 ...