项目中做了一个通用组件的类库,类库中引用了几个第三方组件(DLL),组件发布给同事使用时,需要同时将这几个第三方的DLL一并复制过去,然后添加相关组件的引用。

如何能够将这些第三方的DLL直接打包到我的组件中,而不暴露给调用者,首先想到的是将DLL包装成“嵌入的资源”,而这种方案需要在首先调用将资源程序自动解成物理文件,其结果仍旧是暴露了第三方组件。

后来找到Ilmerge这个工具,该工具是微软官方提供的程序集合并工具,使用方法:

安装后,CMD进入安装好的目录,打命令:

ilmerge Janet.DTest.Lib.dll Janet.Lib.dll /ndebug /out:Janet.DTest.Lib2.dll

其中Janet.Dtest.Lib.dll是我的组件名称,Janet.Lib.dll是第三方组件,Janet.Dtest.Lib2.dll是合并后的文件

在Janet.DTest.Lib中引用了Janet.Lib组件,并调用了其中的函数,如下图所示,两个组件引用关系:

做一个测试的项目,直接引用生成后的Janet.DTest.Lib2.dll

debug目录,生成结果,只有Janet.Dtest.Lib2.dll文件,没有其他第三方组件的DLL,测试运行直接通过。

注:Janet.Dtest.Lib2.dll文件名称可以自己改,也可以在生成时指定生成的目录。

附:

ILMerge参考资料

http://www.cnblogs.com/wuhenke/archive/2010/01/31/1660343.html

将ILMerge做成工具

http://www.cnblogs.com/huangcong/archive/2010/03/29/1699904.html

.net DLL程序集中打包另一个DLL的更多相关文章

  1. .Net将多个DLL打包为一个DLL(ILMerge)

    在做.Net底层编码过程中,为了功能独立,有可能会生成多个DLL,引用时非常不便.这方面微软提供了一个ILMerge工具原版DOS工具,可以将多个DLL合并成一个.下载完成后需要安装一下,然后通过DO ...

  2. 在IIS7里配置 ISAPI,运行dll程序,总提示下载dll

    在IIS7里配置 ISAPI,运行dll程序,总提示下载dll,只需要把对应站点应用程序池里面的高级设置里的启用32位应用程序,设为“true"即可.

  3. winform把所有dll打包成一个exe

    大家都知道做winform开发,是可以利用visual studio进行打包的,但是这种打包的方式需要双击安装,那么有没有什么方法,可以把winform程序打包成绿色版呢?当然,这里的“绿色版”也是相 ...

  4. C#中用ILMerge将所有引用的DLL打成一个DLL文件

    有些文件是必须一起使用的,如果能把多个DLL打包成一个DLL文件,那么引用文件的时候就不需要一个个地去引用,而且每次移动文件的时候也不至于少了哪个必须的DLL文件. 多个DLL文件打包成一个DLL文件 ...

  5. DLL程序的创建步骤和測试程序

    首先,创建DLL程序 然后,加入一个导出类 比如: //Test.h #pragma once class AFX_EXT_CLASS Test { public:  Test(void);  ~Te ...

  6. DLL入门浅析(1)——如何建立DLL

    转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/20/90619.html 初学DLL,结合教程,总结一下自己的所得,希望对DLL初学者们有所帮 ...

  7. DLL注入新姿势:反射式DLL注入研究

    在分析koadic渗透利器时,发现它有一个注入模块,其DLL注入实现方式和一般的注入方式不一样.搜索了一下发现是由HarmanySecurity的Stephen Fewer提出的ReflectiveD ...

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

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

  9. QT5.4 计算器程序 打包&发布,解决dll的最新解决方案

    QT写界面还是很不错,就是打包会比较麻烦,折腾了一天总算是打包完成了. QT软件的打包发布一个难点是必备dll文件的识别,现在高版本QT自带了一个windeployqt工具,直接会把需要的dll生成一 ...

随机推荐

  1. 近年Recsys论文

    2015年~2017年SIGIR,SIGKDD,ICML三大会议的Recsys论文: [转载请注明出处:https://www.cnblogs.com/shenxiaolin/p/8321722.ht ...

  2. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截

    程序猿修仙之路--数据结构之你是否真的懂数组?   数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少. ...

  3. 工作总结 Mapper.Map 映射 AutoMapper

    对象映射工具 //1.创建映射规则  ,第一个参数为源实体(Model),第二个为目标实体(DTO) Mapper.CreateMap<studentSource, studentPurpost ...

  4. DCDC纹波小实验

    关于使用示波器測试纹波的注意事项 使用示波器的AC耦合方式測量 因为示波器的头套easy引人噪声,因此在測试前必需把探头的头套去掉 因为电源的高频噪声非常easy通过小电感就能够滤掉,因此更关心的是中 ...

  5. html 优化 简谈

    一直想写下SEO中关于HTML优化方面的的文章,总算空出这部分时间来了.其实,HTML优化应该是网站内部优化的重点,每个SEOer都需高度重视.根据本人多年实战经验,一般做过HTML优化的网站上线后, ...

  6. react dva 的 connect 与 @connect

    https://dvajs.com/guide/introduce-class.html#connect-方法 connect的作用是将组件和models结合在一起.将models中的state绑定到 ...

  7. JavaScript与DOM(下)

    介绍 上一章我们介绍了JavaScript的基本内容和DOM对象的各个方面,包括如何访问node节点.本章我们将讲解如何通过DOM操作元素并且讨论浏览器事件模型. 本文参考:http://net.tu ...

  8. haproxy 制作使用ssl

    http://www.oschina.net/translate/haproxy-ssl-termation-pass-through

  9. shu_1232 老王赛马

    http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=2 分析:贪心. 用我方最好的马去解决可以解决的对方的最好的马,如是才干 ...

  10. vim:将刚写的单词大写和单词的定义

    最近打算把caps lock映射成<esc>键,那按起来多爽,现在的有一个小问题,如何快捷的输入大写字母. 用这个键盘映射搞定. inoremap <c-u> <esc& ...