MissionPlanner编译

2020-11-19  本文已影响0人  沫简影

C#的小白,查阅网上资料也是不怎么全,特此记录;

【参考文档】

  1. 官方文档 https://ardupilot.org/dev/docs/building-mission-planner.html#building-mission-planner
  2. MissionPlanner编译与修改方法 http://www.nufeichuiyun.com/?p=76
  3. 采用 Visual Studio 编译 Mission Planner 方法与问题总结https://blog.csdn.net/hailiannanhai/article/details/78171546

源码下载地址:https://github.com/ArduPilot/MissionPlanner

Mission Planner上位机软件:http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi

编译环境:win10 + visual studio 2019

vs安装需要的库

1、预先安装最新的Mission Planner软件,需用到一些依赖的动态库

2、“文件” -> “打开” -> “项目/解决方案” ,选择刚下载的文件夹下的“MissionPlanner.sln”

3、右键点击 Mission Planner工程(注意前面有C#图标的工程),点击【属性】、选择【引用路径】、将已经安装的Mission Planner路径填进去,点击添加文件夹;


clipboard.png

点击上图中的【生成事件】,移除所有“预先生成事件命令行“和”后期生成事件命令行“的内容;点击上图中的【生成】,将配置改为”Active(Debug)”

4、删除项目中 的 <ProjectReference Include="..\mono\mcs\class\System.Windows.Forms\System.Windows.Forms-net_4_x.csproj" Condition="'$(TargetFramework)' == 'netstandard2.0'" />

5、删除MissionPlanner\ExtLibs\AltitudeAngelWings.csproj中<TargetFrameworks>net461;netcoreapp3.1;netstandard2.0</TargetFrameworks>的netstandard2.0因为很多命名空间中不存在对应的类型;

同理还有以下项目中的netstandard2.0

6、如果遇到命名空间 system.windows 中不存在类型或命名空间名称 forms (是否缺少程序集引用 )”错误,则右键项目 --->添加-->程序集引用


clipboard1.png
clipboard2.png

执行以上操作后,清理项目再重新生成,如果还有错,则点击错误提示进入对应的cs文件,等几秒后错误就消失了(具体原因未知)

7、删除Updater项目的生成后执行命令行,以解决签名错误的问题;

搜狗截图20201119144440.png

8、解决错误:vs使用简体中文(gb2312)编码加载文件;解决方案:UTF-8编码打开文件

参考https://blog.csdn.net/qq_42974800/article/details/94590512

9、解决错误: 非字符串资源要求在运行时使用 System.Resources.Extensions 程序集,但未在此项目的引用中找到它。

工具-》Nuget包管理工具-》管理解决方案的Nuget程序包,在已安装里搜索System.Resources.Extensions,

如果已安装,则更新MissionPlanner.Controls的依赖版本;

没安装的话,打开程序包管理控制台输入:

Install-Package System.Resources.Extensions -Version 4.6.0

进行安装,再同上更新版本;

clipboard3.png

此处更新一下,需要用4.6.0的版本,不然后续运行会报错 A Major error has occured: 未能加载文件或程序集“System.Resources.Extensions Version=4.0.0.0”(虽然也不是很确定是不是这个的问题,不过折腾很久,最后这里的版本改了就好了。。。)
具体错误如下:


搜狗截图20201124112058.png

10、配置安卓SDK

点击错误提示自动下载更新sdk28(安卓9.0),安装完毕后,进入UsbSerialForAndroid项目,右键,属性,更改目标框架为Android 9.0;

clipboard4.png

11、解决错误:ConcurrentDictionary<int, uavcan.uavcan_protocol_NodeStatus>”未包含“Remove”的定义,并且找不到可接受第一个“ConcurrentDictionary<int, uavcan.uavcan_protocol_NodeStatus>”类型参数的可访问扩展方法“Remove”(是否缺少 using 指令或程序集引用?) UAVCANFlasher
点击对应的错误说明,进入文件后做如下修改:

uavcan.uavcan_protocol_NodeStatus value;
can.NodeList.TryRemove(lastseenDateTime.Key, out value);
// can.NodeList.Remove(lastseenDateTime.Key)
上一篇 下一篇

猜你喜欢

热点阅读