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:

publicvoidSetInputAssemblies(string[] assems);

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

publicstringOutputFile {get;set; }

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

publicvoidSetTargetPlatform(stringplatform,stringdir);

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

publicILMerge.KindTargetKind {get;set; }

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

publicenumKind
 {
 Dll = 0,
 Exe = 1,
 WinExe = 2,
 SameAsPrimaryAssembly = 3,
 }

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

publicvoidMerge();

开始合并。

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

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


Recommended>>
1、How to kill the annoying ads in video apps through technology
2、Three PIMS Vulnerabilities Mileage Secrets Latest Version V23 SQL Injection Vulnerability
3、WEB mini case online bookstore IV
4、IntellijIDEA those hidden good hacks
5、Application Load Balancing with LVS I Basic Concepts and Three Modes

    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号