C#将DLL嵌入到exe当中

  • A+
所属分类:C#

【已解决】C#将DLL嵌入到exe当中 - lin381825673的专栏 - CSDN博客

最近写到好几个小软件都需要引用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
C#将DLL嵌入到exe当中


选择添加现有文件,把所需DLL添加进来
C#将DLL嵌入到exe当中



这样工程下面会自动生成:
C#将DLL嵌入到exe当中



然后,不需要给DLL设置为“嵌入的资源”(反正我是不需要的)
最后,看代码:(Form1.cs)

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)

{

string dllName = args.Name.Contains(",") ? args.Name.Substring(0, 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!
——————————————————————————
前面排版比较恶心,附个程序的图吧:


C#将DLL嵌入到exe当中


  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin