我们在在winform程序时经常会用到外部dll,正常情况下,我的exe运行文件旁就需要这些dll文件相伴,总感觉不爽~~特别是要把软件给别人的时候,如果DLL比较多或者没有放在同一个地方,那麻烦大了~~~

所以,如果能把引用的DLL都嵌入到exe内,最终就剩下一个exe文件就完事的话,那这时间该多美好呀(处女座病~~)我相信这是很多人的梦想~~

于是,一场追逐梦想的征途开始了~~~

——————————————

百度……

利用ILMerge打包。

具体操作:网上下载程序,安装,用cmd命令运行,输入复杂的指令进行打包~~结果,我的居然失败??确实,网上也有人说这个成功率不高~~

参考http://blog.csdn.net/astonqa/article/details/7300856的第二个方法,鄙人整了好久,resourceName那里不会填,然后~也没有然后了……

关于将dll选择为“嵌入的资源”的方法,好像不能用于一般的DLL,参考http://msdn.microsoft.com/en-ca/library/538aes2a(zh-cn).aspx 和http://msdn.microsoft.com/zh-cn/library/hfac4fky(VS.80).aspx

几经周折,找到了http://www.crifan.com/csharp_integrate_dll_library_into_exe_application/comment-page-1/,但是,此文不是一般的长,我是从中间靠下面的【整理】开始看起的……

然后开搞~最后终于成功了!不过发现有需要修改和优化的:

(我的是win7 32bit VS2010  framework 4.0)

第一:无需新增文件夹以及在此文件夹里增加DLL,因为我的VS里头Resources下面已经有了。

第二:不用把DLL的“生成操作”弄成“嵌入的资源”,节省exe空间

第三:看下面完整操作吧~~
双击Resources.resx

选择添加现有文件,把所需DLL添加进来

这样工程下面会自动生成:

然后,不需要给DLL设置为“嵌入的资源”(反正我是不需要的)

最后,看代码:(Form1.cs)

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string dllName = args.Name.Contains(",") ? args.Name.Substring(, args.Name.IndexOf(',')) : args.Name.Replace(".dll", "");
dllName = dllName.Replace(".", "_");
if (dllName.EndsWith("_resources")) return null;
System.Resources.ResourceManager rm = new System.Resources.ResourceManager(GetType().Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());
byte[] bytes = (byte[])rm.GetObject(dllName);
return System.Reflection.Assembly.Load(bytes);
} public Form1()
{       //在InitializeComponent()之前调用
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
InitializeComponent();
}

到此就大功告成啦,当然前提你要把该引用的都引用了,好像有的人说引用的时候需要选择Resources文件夹里头的DLL(就是前面的添加完DLL后会在工程目录下生成Resources文件夹,文件夹里头会放着添加了的DLL),反正我试了不选那里头也行。

把exe复制到其它路径进行测试吧~~GoodLuck!

原文链接:https://blog.csdn.net/lin381825673/article/details/39122257

C#winform将dll封装到exe当中的更多相关文章

  1. C#将DLL嵌入到exe当中

    1.选中项目文件,找到Resources.resx,双击Resources.resx,然后添加文件(选择需要的dll文件),点击确定,项目下会自动生成一个Resources文件夹,里面包含添加dll. ...

  2. 将DLL文件直接封装进exe执行文件中(C#)

    前言:由于项目需要,需制作一个注册机,将个人PC的MAC值和硬盘序列号与软件进行绑定,由于笔者的C++不是很好,所以采用C#进行开发.但在采用C#的时候,获取硬盘的MAC值和序列号的时候又不是很准确, ...

  3. .NET Winform 将引用的dll文件集成到exe中(转)

    Winform程序经常需要引用一些第三方dll文件,这些dll在发布后与exe文件保存在同一目录下,虽然将dll文件集成到exe中会增大文件尺寸,但程序目录会相对整洁. 下面介绍一种比较简单的集成方法 ...

  4. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  5. Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)

    Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...

  6. DLL封装Interface(接口)(D2007+win764位)

    相关资料: http://blog.csdn.net/liangpei2008/article/details/5394911 结果注意: 1.函数的传参方向必须一至. DLL实例代码: ZJQInt ...

  7. python封装成exe

                                版权声明:本文为博主原创文章,未经博主允许不得转载.     https://blog.csdn.net/qq_32113189/article ...

  8. Register DLL Assembly Gacutil.exe(全局程序集缓存工具)

    全局程序集缓存工具使你可以查看和操作全局程序集缓存和下载缓存的内容. 此工具会自动随 Visual Studio 一起安装. 若要运行此工具,请使用开发人员命令提示(或 Windows 7 中的 Vi ...

  9. 将Python脚本封装成exe可执行文件 转

    将Python脚本封装成exe可执行文件 http://www.cnblogs.com/renzo/archive/2012/01/01/2309260.html  cx_freeze是用来将 Pyt ...

随机推荐

  1. vue全家桶(3.3)

    4.7.作为vue的插件使用 在vue中,我们不需要在每个组件中都去引入axios,这样使用起来比较麻烦,我们可以结合插件vue-axios,让操作更简化 1.安装插件 npm install vue ...

  2. C# 接口(interface) 抽象类(abstract)

    类代码: interface Employee { void ShowEmp(); } abstract class EmployeeInPostion: Employee { public abst ...

  3. 你知道Redis可以实现延迟队列吗?

    最近,又重新学习了下Redis,深深被Redis的魅力所折服,我才知道Redis不仅能快还能慢(我想也这么优秀o(╥﹏╥)o),简直是个利器呀. 咳咳咳,大家不要误会,本文很正经的啦! 好了,接下来回 ...

  4. Swoole 中 TCP、UDP 和长连接、短连接

    TCP 服务 swoole 文档 - TCP 服务 tcp 服务端 <?php // 1. 创建 swoole 默认创建的是一个同步的阻塞tcp服务 $host = "0.0.0.0& ...

  5. openstack cinder-backup流程与源码分析

    在现在的云计算大数据环境下,备份容灾已经变成了一个炙手可热的话题,今天,和大家一起分享一下openstack是怎么做灾备的. [首先介绍快照] snapshot可以为volume创建快照,快照中保存了 ...

  6. zabbix fping 监控网络质量

    1,zabbix server (proxy)安装fping wget http://www.fping.org/dist/fping-3.16.tar.gz tar zxvf fping-3.16. ...

  7. centos7----创建虚拟环境

    优点 使不同的应用开发环境独立 环境升级不影响其他应用,也不会影响全局的python环境 它可以防止系统出现包管理混乱和版本的冲突 安装 pip install virtualenv 创建虚拟环境 v ...

  8. Google 出品的 Java 编码规范,强烈推荐,既权威又科学

    这份文档是 Google Java 编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格.原文:google.github.io/st ...

  9. day36 解决粘包问题

    目录 一.tcp粘包问题出现的原因 二.解决粘包问题low的办法 三.egon式解决粘包问题 四.实现并发 1 tcp 2 udp 一.tcp粘包问题出现的原因 前引: tcp的客户端与服务端进行通信 ...

  10. python eval函数,将列表样式的字符串转化为列表

    python eval函数,将列表样式的字符串转化为列表 >>> str_1 = '[1,2,3,4,5,6]'>>> type(str_1)<type 's ...