Mission Planner编译方法与问题解决
最近两天尝试编译Mission Planner,结果遇到了和官方教程不一样的地方,参考了几篇博客,内容都比较久远了还大多雷同,经过摸索,浪费了将近两天的时间,总算编译通过了。
原官方教程链接为:http://ardupilot.org/dev/docs/buildin-mission-planner.html
Mission Planner源码地址为:https://github.com/ArduPilot/MissionPlanner
最新版Mission Planner上位机软件下载链接为:http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi
1、安装visual studio 2017(官方教程要求15.3以上,我编译时的环境为15.6.5),具体操作可以参考原官方教程(其实vs2107打开工程的时候会自动扫描,如果缺少组件再自动安装也可以)
2、下载Mission Planner源码到本地
3、下载最新版的Mission Planner上位机并安装(注意此版本不要与源代码版本差别过大,源代码1.50之前使用的是vs2013编译,只用到了.NET4.0,源代码1.50及以后的版本同时用到了.NET4.0(及以上)和.NETStandard2.0(这也是坑人之处))
4、找到源代码文件夹,使用vs2017打开MissionPlanner.sln(如图)
等工程加载完毕,在解决方案视图中会有很多项目,有些项目的依赖性会有黄色三角,如下图所示
初次加载大部分项目都会有这个,但是其实只有一个名为MissionPlanner.Utilities的项目会在编译时报错,其他的都只会产生warning,并不影响运行,可以先不管。
5、重点找到MissionPlanner.Utilities项目,可以先编译一遍,会发现在.NETStandard2.0框架下无法加载System.Speech,进而连续报错,导致编译失败
解决办法是:先找到该项目依赖项中的System.Speech,右键将其移除(不移除后续无法添加同名dll)
然后右键依赖项,选择添加引用,选择浏览,找到用户文件夹下的.negut\packages\system.speech.dll\1.xx\lib\dnxcore50\lib\System.Speech.dll,选择添加
然后找到安装的Mission Planner上位机路径下的System.Speech.dll,同样添加进来。
按添加顺序同时勾选上点确定
(注意顺序!!!).negut文件夹下对应的是.NET4.x的dll,上位机软件下的.dll包含.NETStandard2.0,由于vs2017默认先添加到.NET4.x,所以顺序错了依然会编译出错(我实验的情况就是如此,感觉很奇葩。。。)