前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 版dll 程序集合并工具

C# 版dll 程序集合并工具

作者头像
庞小明
发布2018-03-07 17:18:10
1.9K0
发布2018-03-07 17:18:10
举报
文章被收录于专栏:pangguoming

最近要开发一个控件给同事用,开发中会引用一些第三方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:

代码语言:javascript
复制
public void SetInputAssemblies(string[] assems);

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

代码语言:javascript
复制
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)

代码语言:javascript
复制
public enum Kind
        {
            Dll = 0,
            Exe = 1,
            WinExe = 2,
            SameAsPrimaryAssembly = 3,
        }

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

代码语言:javascript
复制
public void Merge();

开始合并。

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档