我们在在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. Spring AOP学习笔记05:AOP失效的罪因

    前面的文章中我们介绍了Spring AOP的简单使用,并从源码的角度学习了其底层的实现原理,有了这些基础之后,本文来讨论一下Spring AOP失效的问题,这个问题可能我们在平时工作中或多或少也会碰到 ...

  2. PKIX

    这是证书认证不通过的问题,对https协议免认证 http://blog.csdn.net/zziamalei/article/details/46520797 使用上面的方法时,使用spring的& ...

  3. 解决SELinux阻止Nginx访问服务

    在使用 yum 安装 nginx 后可能会出现配置完成后却无法访问的问题,查看 audit.log 会发现类似于以下的错误信息 出现此问题的原因是 SELinux 基于最小权限原则默认拦截了 Ngin ...

  4. C++ 简单的UDP客户端与服务端

    .h #pragma once #ifndef __C_UDP_OBJECT_H__ #define __C_UDP_OBJECT_H__ #define OS_PLATFORM_WIN #inclu ...

  5. ORA-04063: package body "DBSNMP.BSLN_INTERNAL" has errors

    ORA-04063: package body "DBSNMP.BSLN_INTERNAL" has errors 问题描述: 警告日志出现报错: Sun Jun 21 00:00 ...

  6. css使用rgba()或hsla()设置半透明或完全透明边框border

    在css中我们想实现透明颜色,首先就会想到rgba()和hsla()这2个属性.这篇文章就简单介绍下使用这2种方式来实现半透明边框. 1.使用rgba方式: border: 10px solid rg ...

  7. 一口气说出 OAuth2.0 的四种鉴权方式,面试官会高看一眼

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 上周我的自研开源项目开始破土动工了,<开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石 > , ...

  8. Deno 学习笔记(1)安装及简单的request

    Deno下载和安装 PowerShell iwr https://deno.land/x/install/install.ps1 -useb | iex Shell curl -fsSL https: ...

  9. 从0开始,手把手教你开发并部署上线一个知识测验微信小程序

    上线项目演示 微信搜索[放马来答]或扫以下二维码体验: 项目源码 项目源码 其他版本 Vue答题App实战教程 Hello小程序 1.注册微信小程序 点击立即注册,选择微信小程序,按照要求填写信息 2 ...

  10. day29 作业

    1.引入属性访问控制+property 2.引入继承与派生的概念来减少代码冗余 注意:要满足什么"是"什么的关系,不满足"是"的关系不要去继承 import u ...