# HybridCLR Gen All 与 WebGL 原生构建 ## 2026-10-22 故障与处理 当前环境为 Windows、Unity 2022.3.62f3、HybridCLR 8.14.1。 `HybridCLR/Generate/All` 在 `GenerateStripedAOTDlls` 内部调用 WebGL Player 构建。 本次错误发生在原生工具链,C# 编译已通过: - `clang++` 编译 `mscorlib.cpp`、`UnityEngine.CoreModule__4.cpp` 时退出,前者返回 `3221226505`,后者包含 LLVM Instruction Selection 崩溃信息。 - 两个文件保持原来的 `-O3` 参数单独重编译均成功。 - Bee 并发降为 4 后,全部 C++ 编译通过;随后独立线程池中的 `wasm-opt` 返回 `3221225477`。 - 同一份 wasm 输入、同一优化参数在 `BINARYEN_CORES=4` 下单独处理成功。 上述证据支持限制构建并发作为规避措施,尚不能单独确定内存、硬件或工具链内部缺陷中的哪一项是根因。 ## 项目处理 `AIClient/Assets/Editor/HybridCLR/WebGlBuildConcurrency.cs` 通过 Unity 构建回调处理 **Windows 编辑器中的 WebGL Player 构建**,包括标准 HybridCLR Gen All 内部的构建及微信导出: - 未显式指定时,将当前进程的 `BEE_BUILD_THREADS`、`BINARYEN_CORES` 临时设为 `4`。 - 保留开发者或 CI 已提供的环境变量值。 - 成功后恢复环境变量;失败时通过编辑器空闲更新恢复,并在程序集重载前清理。 - 保留既有 C++/wasm 优化参数,不修改 Unity 安装目录或 PackageCache。 Bee 的并发环境变量也存在于当前 Unity 自带的 `bee_backend.exe` 中;本次采样确认 clang 进程数最多为 4。 Binaryen 对并发变量的说明见其[官方调试文档](https://github.com/WebAssembly/binaryen/wiki/Debugging)。 ## 验证入口与记录 按项目 Unity Pipeline 流程编译后,执行: ```powershell unity command --timeout 900 run_script --file AgentScripts/VerifyHybridClrGeneration.cs --entry VerifyHybridClrGeneration.GenerateAll --timeout_ms 900000 --project-path D:/UD/AI/AIGame/AIClient ``` 该入口直接调用原始 `PrebuildCommand.GenerateAll()`,不自行设置线程环境变量,也不跳过步骤;检查 AOT DLL、生成文件及环境变量恢复。 成功回执写入 `Tools/output/hybridclr_genall/generate_all.json`。 本次标准流程于 2026-10-22 16:35(北京时间)通过,耗时约 295 秒:生成 55 个 AOT DLL,`MethodBridge.cpp`、`UnityVersion.h`、`link.xml`、`AOTGenericReferences.cs` 均为本轮更新,环境变量已恢复,生成后的 C# 编译通过。 `VerifyHybridClrGeneration.VerifyCallbacks` 另行验证了默认并发、成功清理、显式覆盖值保留和失败后空闲清理,全部通过。 辅助工具 `Tools/diagnose_webgl_clang.py` 和 `Tools/diagnose_webgl_wasm_opt.py` 从 Editor.log 提取失败命令,将重放输出写入 `Tools/output/hybridclr_genall/`,不修改 Unity 的构建产物。