恩厨007 2025-07-25 20:51 采纳率: 0%
浏览 44

请教:MissionPlanner编译失败

请教各位,搏斗几日,不知道为什么一直编译失败

我想要达到的结果

想用Visual Studio2019编译MissionPlanner地面站,进行二次开发

问题遇到的现象和发生背景

从github上下载好源码并成功更新子模块(切到1.3.80分支)后,在VisualStudio2019中生成解决方案失败
主要报错为找不到元数据文件和GenerateGepsFile任务意外失败:

img

img

操作环境、软件版本等信息

win11操作系统,MissonPlanner下载版本1.3.80(适配APM代码版本4.4.4),VisualStudio2019

尝试过的解决方法

从Visual Studio Installer和.NET 官网(.NET6.0)上下载了各个版本的SDK和一堆组件

img

img

  • 写回答

6条回答 默认 最新

  • 檀越@新空间 2025-07-25 20:52
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    根据你描述的问题,MissionPlanner 在 Visual Studio 2019 中编译失败,主要报错包括:

    • 找不到元数据文件(metadata file not found)
    • GenerateGepsFile 任务意外失败

    这些问题通常与以下原因有关:


    问题根源分析

    1. 项目依赖项未正确加载或缺失

    MissionPlanner 是一个基于 .NET Framework 的 WPF 应用程序,但某些组件可能依赖于特定版本的 SDK 或 NuGet 包。如果这些依赖没有正确安装或引用,会导致编译失败。

    2. 生成 GEP 文件时出现问题

    GenerateGepsFile 是用于生成图形资源文件(如图标、图像等)的 MSBuild 任务。如果此任务失败,可能是由于:

    • 图像路径错误
    • 未正确配置资源生成工具
    • 缺少必要的构建工具(如 gdiplus.dll

    3. Visual Studio 2019 对 .NET 6 的兼容性问题

    虽然 VS2019 支持 .NET 6,但有些项目可能仍使用旧版构建系统,导致冲突。


    🛠️ 解决方案步骤

    以下是逐步解决 MissionPlanner 编译失败的详细步骤:

    1. 确保所有子模块已正确更新

    git submodule update --init --recursive
    

    注意: 确保你处于 1.3.80 分支,并且所有子模块都已拉取完毕。


    2. 安装所有必要的开发工具和 SDK

    Visual Studio Installer 中,确保安装了以下内容:

    • .NET 6 SDK(即使你使用的是 .NET Framework)
    • Windows 10 SDK(建议 10.0.19041 或更高版本)
    • C++ 构建工具(特别是用于处理 GDI+ 和图形资源的组件)
    • NuGet 包管理器(用于恢复依赖)

    3. 修复项目文件中的路径问题

    打开 MissionPlanner.sln,右键点击项目 -> 属性 -> 生成事件,检查是否有如下设置:

    • 预生成事件:确保路径正确,尤其是与 GenerateGepsFile 相关的脚本。
    • 后生成事件:检查是否尝试复制某些不存在的文件。

    4. 手动修复 GenerateGepsFile 任务

    如果你看到类似下面的错误:

    MSB4018: The "GenerateGepsFile" task failed unexpectedly.
    

    请尝试以下操作:

    ✅ 修改 .csproj 文件

    找到 MissionPlanner.csproj 文件,搜索 GenerateGepsFile 任务,将其注释掉或删除。例如:

    <!-- <Target Name="GenerateGepsFile" BeforeTargets="BeforeBuild">
        <Exec Command="generategeps.exe -i Resources\icons.gex -o Resources\icons.gep" />
    </Target> -->
    

    注意: 如果不生成 GEP 文件,可能会导致图标显示异常,但这对编译本身是可接受的。


    5. 清理并重新生成解决方案

    1. 在 Visual Studio 中,选择 生成 -> 清理解决方案
    2. 再次选择 生成 -> 重新生成解决方案

    6. 修复缺失的元数据文件

    如果你看到类似错误:

    error CS0006: Metadata file '...\\bin\\Debug\\SomeLibrary.dll' could not be found
    

    请执行以下操作:

    • 右键项目 -> 管理 NuGet 程序包
    • 点击 还原 按钮,确保所有依赖项被正确下载
    • 如果仍然失败,尝试手动添加缺失的 DLL 文件到项目引用中

    7. 检查 .NET Framework 版本

    确保项目目标框架为 .NET Framework 4.7.2 或更高版本(取决于 MissionPlanner 的实际需求):

    • 右键项目 -> 属性 -> 应用程序 -> 目标框架

    🔧 示例修改后的 .csproj 文件片段(仅供参考)

    如果你决定禁用 GenerateGepsFile 任务,可以修改如下部分:

    <Target Name="GenerateGepsFile" BeforeTargets="BeforeBuild">
        <!-- <Exec Command="generategeps.exe -i Resources\icons.gex -o Resources\icons.gep" /> -->
    </Target>
    

    注意: 如果你需要图标资源,请确保 icons.gep 文件存在,否则需要从其他地方获取或重新生成。


    ✅ 最终建议

    | 步骤 | 内容 | |------|------| | 1 | 确保所有子模块正确更新 | | 2 | 安装所有必要 SDK 和 C++ 工具 | | 3 | 修复 .csproj 文件中的路径和任务 | | 4 | 清理并重新生成解决方案 | | 5 | 检查并修复缺失的依赖项 | | 6 | 若无法修复 GenerateGepsFile,考虑临时禁用该任务 |


    📦 附加建议

    • 如果你只是想进行二次开发,可以考虑使用 .NET 6 + MAUI.NET Core 3.1 来重构项目,以避免 .NET Framework 的兼容性问题。
    • 如果你遇到其他具体错误信息,欢迎继续提供,我可以进一步帮你定位。

    如有更多错误日志或截图,也欢迎补充,我可以更精准地帮你分析!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月25日