c# winform 中 怎样把dll封装到exe中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# winform 中 怎样把dll封装到exe中相关的知识,希望对你有一定的参考价值。
(1)、ILMerge。这个工具是MS官方提供的,在 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17630 可以下载得到。这个工具能够把几个可执行文件(exe或者dll)打包集成进一个可执行文件中,具体使用方法网上很多,这里不再赘述。值得说明的是,我尝试写了一个.bat批处理来merge,效果非常好。利用pause指令还能随时暂停ILMerge运行过程,可以看到merge失败时是哪里的问题。
(2)、嵌入DLL作为资源。
推荐使用这种方式。这个方法是CLR via C#的作者发明的(貌似,反正我是从他那里学的),原帖的地址http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx 参考技术A 可以把DLL文件加入到主程序的资源里面 当然这个DLL必须是COM 组件而不是动态连接库 然后打开软件之后判断目录中DLL是否存在 如果已经陈在的话就不进行操作如果不存在的话就写出DLL本回答被提问者和网友采纳 参考技术B 除了你把所有窗体和文件都放在一个项目底下,不然你只能引用,引用就必然要生成其他项目的DLL。
所以这个封装似乎没有意义啊,dll分开来也不影响吧 参考技术C 在你引用的DLL上,鼠标右键,属性,将“嵌入互操作类型”设置为true。这样,就可以将你的应用程序生成为只有一个exe的可执行程序。
怎样可以将DLL编译到EXE文件里
添加一个自定义资源类型,指向该文件即可。运行时可以利用资源管理函数把资源存到Windows的临时目录,文件名称越怪越好,不需要和原来的文件名一样。利用loadLibrary和GetProcAddress,调用函数,最后删除临时文件,毁尸灭迹。如果你熟悉DLL动态延迟加载,那将是再好不过。相关文章可以参考Windows Deveoper Magazine中 2002.7 这篇文章讲述了如何把DLL打包到一个EXE文件中,如何把它存到一个临时的不为人所知目录,如何动态延迟加载这个动态连接库(注意动态延迟加载用的是是静态连接,不需要调用loadLibrary和GetProcAddress函数,但在编译时需要指定编译选项你可以参考《Windows核心编程》参考关于DLL延迟加载的描述)。程序函数调用完毕程序退出前可以神不知鬼不觉地把文件删除。做到踏雪无痕。 参考技术A 回答添加dll 右击工程,添加需要的dll,2.设置Build Action 然后,选中上面添加的dll,设置Build Action为“Embedded Resource”, 通过反射机制注册资源中的dll 接下来,我们编写反射机制的代码,将资源中的dll加载exe中,直接上代码,如下: staticclassLoadResourceDllstaticDictionaryDlls=newDictionary();staticDictionaryAssemblies=newDictionary();staticAssemblyAssemblyResolve(objectsender,ResolveEventArgsargs)//程序集Assemblyass;
以上是关于c# winform 中 怎样把dll封装到exe中的主要内容,如果未能解决你的问题,请参考以下文章
C# winform 引用问题 引用了SHDocVw.dll。 把exe单独拷出来就报异常。 有啥方法解决?