
如何从源码构建带 C# 支持的 Godot生成 mono glue 并编译 C# 程序集【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot如果你要从 Godot 源码树构建一个自带 C#.NET支持的编辑器光编译 C 引擎还不够mono 模块还需要一份由引擎二进制自身生成的 C# glue 代码以及一组编译好的 C# 程序集GodotSharp.dll等。modules/mono/README.md 描述的完整流程分三步用 scons 开启module_mono_enabledyes构建 Godot、用构建出的二进制执行--generate-mono-glue生成 glue、再运行build_assemblies.py编译 C# 解决方案。本文按这个顺序给出每一步的命令、前置条件和结果验证方式。前置条件一份完整的 Godot 源码树。README 中所有示例路径如./modules/mono/glue、./bin都假设命令在Godot 源码根目录下执行三步操作都请保持在源码根目录运行。一个脚本能找到的 MSBuild 工具链。build_assemblies.py 按以下优先级查找构建工具PATH中的dotnetCLI首选dotnet msbuildWindows 上的独立 MSBuild通过vswhere定位 Visual Studio 的 MSBuildMono 自带的 MSBuildmacOS 会额外检查/Library/Frameworks/Mono.framework/Versions/Current/bin和/usr/local/var/homebrew/linked/mono/bin其余平台查PATH中的msbuild。三者都找不到时脚本会打印Unable to find MSBuild并以退出码 1 终止。如果你用 Mono 的 MSBuild 构建脚本会自动为 Mono 环境设置CscToolExe、VbcToolExe、FscToolExe等环境变量指向 Monobin目录下的批处理文件这一点无需手动处理。第一步用 mono 模块构建 Godot 二进制在源码根目录用 scons 构建并传入module_mono_enabledyesscons module_mono_enabledyes这一步产出的编辑器二进制是后两步的依赖README 中把它记作godot_binary按示例路径就是./bin下的 Godot 可执行文件。如果你要构建双精度版本按 modules/mono/README.md 的说明改为给 scons 追加precisiondouble参数并在第三步编译 NuGet 程序集时相应加--precisiondouble见后文可选分支。第二步生成 mono glue构建成功后用刚构建出的二进制生成 C# glue 代码输出到modules/mono/gluegodot_binary --generate-mono-glue ./modules/mono/glue这里godot_binary替换为你第一步构建出的 Godot 编辑器可执行文件路径其余部分原样保留。生成完成后进程会立即退出这是 bindings_generator.cpp 中cleanup_and_exit_godot()的预期行为不是异常。有一个容易踩的边界这条命令不能在项目目录下运行。如果当前目录是一个游戏项目会直接报错并退出Cannot generate Mono glue while running a game project. Change current directory or enable --editor.处理方式就是错误信息给出的两条切换到非项目目录例如源码根目录再执行或显式加上--editor。如果没给输出目录则报No output directory specified (expected path to {GODOT_ROOT}/modules/mono/glue)。第三步编译 C# 程序集回到源码根目录运行 mono 模块自带的构建脚本./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin--godot-output-dir是必选参数指定程序集最终的输出位置示例中为./bin。脚本内部依次做四件事根据当前版本信息生成SdkPackageVersions.props和文档 URL 常量编译modules/mono/glue/GodotSharp/GodotSharp.slnDebug 和 Release 两种配置各编译一次编译editor/GodotTools/GodotTools.sln编译editor/Godot.NET.Sdk/Godot.NET.Sdk.sln。任何一步 MSBuild 返回非零退出码脚本会立即以相同退出码终止不会继续后面的解决方案。验证构建结果成功时脚本会打印Running MSBuild: ...每次调用 MSBuild 时以及逐个的Copying assembly to ...。判断是否完成最直接的方式是检查输出目录中出现的程序集文件脚本会把 GodotSharp 解决方案的产物复制到./bin/GodotSharp/Api/Debug/ ./bin/GodotSharp/Api/Release/两个目录中各自包含以下 9 个文件GodotSharp.dll GodotSharp.pdb GodotSharp.xml GodotSharpEditor.dll GodotSharpEditor.pdb GodotSharpEditor.xml GodotPlugins.dll GodotPlugins.pdb GodotPlugins.runtimeconfig.json这些文件齐全且脚本退出码为 0说明 mono glue 与 C# 程序集这一环节已经构建完成。可选分支本地 NuGet 源开发 NuGet 包时使用。如果你在开发 GodotSharp API 程序集、源码生成器或 MSBuild SDK 这些以 NuGet 包形式分发的组件需要先建一个本地 NuGet 源让 MSBuild 能找到它们并确保缓存里没有同名的其他版本否则 MSBuild 可能选中缓存里的旧包dotnet nuget add source ~/MyLocalNugetSource --name MyLocalNugetSource然后在第三步的命令上加--push-nupkgs-local把构建出的包推入该本地源并清理缓存中的冲突版本。README 建议开发期间编译 C# 解决方案时始终带上这个选项./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin \ --push-nupkgs-local ~/MyLocalNugetSource双精度构建。引擎若以precisiondouble构建编译程序集时必须对应传--precisiondouble内部会加上/p:GodotFloat64true保持两边一致./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin \ --push-nupkgs-local ~/MyLocalNugetSource --precisiondouble其他脚本参数。build_assemblies.py 还提供--no-deprecated当引擎以deprecatedno构建时必加内部对应/p:GodotNoDeprecatedtrue、--dev-debugGodotTools 与 Godot.NET.Sdk 用ConfigurationDebug构建、--werror把编译器警告当错误/p:TreatWarningsAsErrorstrue、--godot-platform与--mono-prefix后者用于提示脚本去哪里找 Mono 的 MSBuild。按需追加即可不影响主路径。排查与限制脚本报Unable to find MSBuild说明dotnetCLI、独立 MSBuild、Mono MSBuild 均未命中先安装/配置其中一种工具并确认其在PATH或 macOS 上位于 Mono 框架默认路径下再重跑第三步。glue 生成报 Cannot generate Mono glue while running a game project当前目录是项目目录换到源码根目录或加--editor重跑第二步。MSBuild 阶段失败脚本原样透传 MSBuild 的退出码错误细节在Running MSBuild: ...之后的 MSBuild 输出里按具体报错处理脚本不会绕过失败继续构建后续解决方案。源码层面的一点限制--generate-mono-glue的处理逻辑在 bindings_generator.cpp 中被DEBUG_ENABLED宏包裹即该功能只存在于启用 debug 的构建中如果按上述流程执行时命令不存在或无效先确认你的构建是 debug-enabled 的。完成这三步后modules/mono/glue下是刚生成的 glue 代码./bin/GodotSharp/Api/下是编译好的 C# 程序集带 C# 支持的 Godot 引擎构建到此就绪。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考