您现在的位置是:首页 >其他 >在windows系统中使用Ceres非线性优化库:(三)发布应用程序网站首页其他
在windows系统中使用Ceres非线性优化库:(三)发布应用程序
1.集成DLL库到exe应用程序
1.1.Costura.Fody
1.2.ILMerge和ILMergeGUI
1.3.WinRAR
2.制作安装包
(三)发布应用程序
在C#的项目中,经常会引用一些外部的DLL库。在发布的时候,必需将这些库和可执行程序一起发布,否则会导致程序无法运行。一种是将DLL集成到exe文件后直接发布绿色版软件,另一种是为程序制作安装包后用户在本地进行安装。
1.集成DLL库到exe应用程序
可以将DLL作为资源直接嵌入到项目中,也可以采用第三方工具来将DLL和exe进行集成。具体例程看这篇文章:
https://haolaoshi.blog.csdn.net/article/details/102502693
据说VS默认的资源嵌入方式只对托管的DLL(也就是基于.NET的DLL)好使,对非托管的DLL(比如C++的DLL)不起作用。我尝试了一下没有成功,所以放弃了,当然也可能是我哪里操作不对。而要打包或嵌入非托管的DLL,可以借助第三方工具轻松实现。下面主要介绍几种常见的第三方工具来将DLL和exe进行集成。参考了下面这篇文章:
https://www.cnblogs.com/sndnnlfhvk/p/5547427.html
1.1.Costura.Fody
可以在build阶段直接将依赖的DLL合并在目标exe中,支持非托管DLL进行mixed mode 打包,不足之处是只能将DLL合并到exe中,不支持将一个DLL合并到另一个DLL。
Costura.Fody下载地址:GitHub - Fody/Costura: Embed references as resources
如果是项目中依赖的托管DLL,通过Nuget安装Fody和Costura.Fody之后,在项目编译阶段这些托管DLL会自动被合并到目标exe。
而对于非托管DLL(比如C++的DLL),我们需要在项目中的FodyWeavers.xml文件中添加这些DLL名称(注意名称不带.dll后缀),如果项目中没有FodyWeavers.xml这个文件,可以往项目中添加这个xml文件。
另外需要在项目中新建一个文件夹,如果你的DLL是64位的,那么文件夹名称就是Costura64,如果你的DLL是32位的,那么文件夹名称就是Costura32。接着将你的DLL文件都拷贝到这个文件夹,同时项目中的这个文件夹也要做相应添加操作。
最后,还要将这些DLL的属性设置成“嵌入的资源”。都设置完后,就可以编译项目得到打包的exe,把这个exe拷贝到另一台电脑就可以直接运行了。
参考文章:
C#(.Net) 将非托管dll嵌入exe中 - 腾讯云开发者社区-腾讯云
1.2.ILMerge和ILMergeGUI
支持将EXE依赖的DLL合并到EXE中,也支持将主DLL依赖的其他DLL合并到一个DLL中。
ILMerge下载地址:
https://www.microsoft.com/en-us/download/details.aspx?id=17630
ILMergeGUI下载地址:
http://ilmergegui.codeplex.com/
1.3.WinRAR
用WinRAR制作自动解压运行的文件,也能满足我们的需求。具体方法请看这篇文章:
https://www.cnblogs.com/fxd980519/articles/4807756.html
2.制作安装包
(1)VS自带的发布工具
记得选择对应的.NET Framework版本,以及用户可以在线安装的系统级运行时库版本。
(2)安装包发布插件Microsoft Visual Studio Installer Projects
教程:
https://www.cnblogs.com/ttcbk/p/14875456.html