C#winform将dll封装到exe当中
我们在在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当中的更多相关文章
- C#将DLL嵌入到exe当中
1.选中项目文件,找到Resources.resx,双击Resources.resx,然后添加文件(选择需要的dll文件),点击确定,项目下会自动生成一个Resources文件夹,里面包含添加dll. ...
- 将DLL文件直接封装进exe执行文件中(C#)
前言:由于项目需要,需制作一个注册机,将个人PC的MAC值和硬盘序列号与软件进行绑定,由于笔者的C++不是很好,所以采用C#进行开发.但在采用C#的时候,获取硬盘的MAC值和序列号的时候又不是很准确, ...
- .NET Winform 将引用的dll文件集成到exe中(转)
Winform程序经常需要引用一些第三方dll文件,这些dll在发布后与exe文件保存在同一目录下,虽然将dll文件集成到exe中会增大文件尺寸,但程序目录会相对整洁. 下面介绍一种比较简单的集成方法 ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)
Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...
- DLL封装Interface(接口)(D2007+win764位)
相关资料: http://blog.csdn.net/liangpei2008/article/details/5394911 结果注意: 1.函数的传参方向必须一至. DLL实例代码: ZJQInt ...
- python封装成exe
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_32113189/article ...
- Register DLL Assembly Gacutil.exe(全局程序集缓存工具)
全局程序集缓存工具使你可以查看和操作全局程序集缓存和下载缓存的内容. 此工具会自动随 Visual Studio 一起安装. 若要运行此工具,请使用开发人员命令提示(或 Windows 7 中的 Vi ...
- 将Python脚本封装成exe可执行文件 转
将Python脚本封装成exe可执行文件 http://www.cnblogs.com/renzo/archive/2012/01/01/2309260.html cx_freeze是用来将 Pyt ...
随机推荐
- web前端达到什么水平,才能找到工作?
前端都需要学什么(可以分为八个阶段)<1>第一阶段: HTML+CSS:HTML进阶. CSS进阶.DIV+CSS布局.HTML+CSS整站开发. JavaScript基础:Js基础教程. ...
- BAT 非右键方式以管理员身份运行批处理
@echo off & PUSHD %~dp0 & TITLE Run The BAT File As An Administrator mode con lines=4 cols=6 ...
- 别逃避,是时候来给JVM一记重锤了
今天是猿灯塔“365天原创计划”第2天. 今天讲: 为什么写这个主题呢? 之前看到不少同学在讨论, 今天呢火星哥抽出点时间来帮大家整理一下关于JVM的一些知识点 一.JVM是什 ...
- Vs Code推荐安装插件
前言: Visual Studio Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的Vs Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持 ...
- 神秘的角落之张东升做了Java老师,悲剧就这样开始了
故事背景 主人公张东升是某大学某软件学院的一名Java老师,他平时给学生讲课风格古怪呆板,加上他普通话不标准,一口家乡话,每次给学生讲课都分两种情况: 第一种情况:手持课本,把本节要讲的内容按书本 ...
- CF 1912 A NEKO's Maze Game
题目传送门 题目描述 输入 输出 样例 样例输入 样例输出 Yes No No No Yes 一句话题意:2*n的迷宫,从(1,1)出发到(2,n),初始时全部的都是地面,每次询问会把一个地面给变成熔 ...
- 调整数组顺序使奇数位于偶数前面(剑指offer-13)
方法1:新建两个数组,一个数组用来放奇数,一个数组用来放偶数,最后再把它们合并起来. 1 import java.util.*; 2 public class Solution { 3 public ...
- 关于echarts中的饼状图的label文字显示过长的问题
label: { normal: { fontSize: 14, formatter(v) { let text = v.name let count = text.indexOf('¥') cons ...
- vue 实现滑块验证码
图一为拖拽前效果,图二为拖拽后效果 一.新建文件JcRange.vue,代码如下: 1.模板代码: <template> <div class="jc-component_ ...
- IE9+的树状下拉菜单,支持多选
//JS核心代码function treeBox(Config){var el=eval(Config.el);var w=Config.width;var h=Config.height;var d ...