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

4 篇文章 0 订阅

今天做了一个软件,想发布的时候才发现调用的类没几个,就像把它们都跟EXE文件打包在一起,以后复制去别的地方用也方便,于是上网搜了一下,发现网上大部分都是用ILMerge实现的,于是也自己试了一下,不过网上都没有详细的步骤演示,我就花点时间做了个教程,方便以后再有人想打包自己的程序, 有篇文章可以参考,好了废话少说,马上开始:

  1.先到http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en下载ILMerge,才600多K,一下子就下好了.

  查看原图(大图)

  2.下载后是安装:

  查看原图(大图)

  3.不到一分钟就可以安装完毕:

  4.我是安装在I盘下ILMerge目录下,以下是安装后的文件,就一个ILMerge.exe文件而已,我们等会就是用它打包程序的.

  5.为了演示,我重新建了个工程,最后生成的是 Main.exe 和 newDll文件,其中newDll是Main.exe 中要引用的Dll文件,为了演示方便,我将它们都复制到了ILMerge的目录下,现在我们就试着用ILMerge将newDll和Main.exe文件打包起来吧.

  6.然后进入dos窗口,进入ILMerge目录,然后执行下面代码:

  I:ILMergeILMerge.exe /ndebug /target:winexe  /out:newclient.exe MainExe.exe  /log newDll.dll

  7.ILMerge运行时的窗口,此时它正在努力的将Main.exe和newDll文件捆绑在一起:

  查看原图(大图)

  8.DOS窗口关闭后,我们在去ILMerge目录下看看,此时已经生成好了我们想要的newclient.exe文件,它就是Main.exe和newDll.dll的结合体啦:

  以上实验在WIN7下.net framework3.5 平台,vs2008环境中测试通过

来源: 博客园   作者:huangcong   http://tech.ddvip.com/2010-04/1270099865149311.html

C#中,可以使用以下两种方法将DLL文件打包一个EXE程序中: 1. 使用ILMerge工具 ILMerge一个免费的工具,可以将多个.NET程序集合并成一个程序集。你可以将所有的DLL文件EXE文件都放到同一个文件夹中,然后使用ILMerge工具将它们合并成一个EXE文件。 使用ILMerge的命令行如下: ``` ILMerge.exe /out:MyApp.exe MyApp.exe MyDll1.dll MyDll2.dll ``` 其中,/out参数指定合并后的程序集名称,MyApp.exe是主程序集,MyDll1.dll和MyDll2.dll是要合并的程序集。 2. 使用Visual Studio的资源文件 另一种方法是将DLL文件作为资源文件嵌入到EXE程序中。在Visual Studio中,你可以将DLL文件添加到项目中,然后设置它们的Build Action为Embedded Resource。 然后,在代码中,你可以使用Assembly类来访问嵌入的资源。例如: ```csharp using System.Reflection; // 加载嵌入的DLL文件 Assembly assembly = Assembly.LoadFrom("MyApp.exe"); // 获取嵌入的资源流 Stream stream = assembly.GetManifestResourceStream("MyDll1.dll"); // 读取资源流中的数据 byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); // 将数据加载到内存中 Assembly dll = Assembly.Load(buffer); ``` 这个例子中,MyApp.exe是主程序集,MyDll1.dll是嵌入的DLL文件。使用Assembly.LoadFrom方法加载主程序集,然后使用Assembly.GetManifestResourceStream方法获取嵌入的资源流。最后,使用Assembly.Load方法将数据加载到内存中,这样就可以使用嵌入的DLL文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值