您现在的位置是:首页 >其他 >在windows系统中使用Ceres非线性优化库:(三)发布应用程序网站首页其他

在windows系统中使用Ceres非线性优化库:(三)发布应用程序

机器人研究猿 2023-06-02 20:00:02
简介在windows系统中使用Ceres非线性优化库:(三)发布应用程序

(一)安装Ceres库

(二)调用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

参考文献

[1] 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。