资讯动态

BepInEx IL2CPP 插件框架部署自救速查

发布时间:2026/10/14 2:58:13 来源:尧图企业网站定制
BepInEx IL2CPP 插件框架部署自救速查【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInExBepInEx 是 Unity 与 .NET 游戏的插件框架6.0.0 版本里 Unity Mono 后端有稳定发行IL2CPP 链路仍在演进。但给 IL2CPP 编译的游戏挂插件只能走这一条链doorstop 注入 → CoreCLR 起运行时 → Cpp2IL 翻元数据 → Il2CppInterop 生成桥接程序集 → 链式加载器按依赖排序加载插件。本文只回答三件事怎么部署、跑不动怎么查、内部怎么分层。部署前把 3 个前提敲定先说死平台边界和 SDK 版本不对后面 5 步一步都省不掉。平台按 README 兼容表IL2CPP 版只支持 Windows x64 与 Linux x64macOS 和 ARM 都不行运行时内置运行时基于 dotnet-runtime 6.0.7本地构建要求 .NET 6.0 SDK版本Directory.Build.props中VersionPrefix为 6.0.0Release 构建会自动产出 NuGet 包与 XML 文档GeneratePackageOnBuild与GenerateDocumentationFile均默认开启。5 步把 BepInEx 装进 IL2CPP 游戏结论先行.NET 6 SDK 装好后5 步就能让游戏进程改走 BepInEx 入口。获取源码git clone https://gitcode.com/GitHub_Trending/be/BepInEx构建Linux 用./build.sh --target CompileWindows 用build.cmd --target Compile脚本会自动拉取 Cpp2IL 等依赖详见 docs/BUILDING.md依赖齐了直接dotnet build BepInEx.sln也行部署把bin/产物放进游戏根目录核心在BepInEx/core/CoreCLR 运行时在游戏根目录的dotnet/核对配置检查doorstop_config_il2cpp.ini的 3 个关键值见下节启动Windows 直接双击游戏启动器Linux 用自带脚本Linux 下这条命令先给启动脚本加执行权限再把它和游戏可执行文件一起跑起来chmod x run_bepinex_il2cpp.sh ./run_bepinex_il2cpp.sh 游戏可执行文件入口对齐doorstop 只认这 3 个值结论先行3 个值全对doorstop 才肯把进程第一脚交给 BepInEx错一个就静默失败。模板文件在Runtimes/Unity/Doorstop/doorstop_config_il2cpp.ini路径均相对游戏根目录。配置项模板默认值指什么target_assemblyBepInEx/core/BepInEx.Unity.IL2CPP.dll入口程序集须含Doorstop.Entrypoint.Start()coreclr_pathdotnet/coreclr.dllLinux 脚本里是dotnet/libcoreclr自动补.socorlib_dirdotnetmscorlib、System等托管核心库目录三个值都对但报找不到游戏元数据再查GlobalMetadataPath默认{GameDataPath}/il2cpp_data/Metadata/global-metadata.dat。启动链路5 层各管一件事结论先行整条链路是一条直线每层只接住上一层递过来的活。一句话doorstop 抢下进程启动的第一脚BepInEx 是站在 CoreCLR 与 IL2CPP 游戏之间的现场翻译官。层位置一句话职责注入层Runtimes/Unity/Doorstop/Linux 用LD_PRELOAD注入启动入口换成 BepInEx预加载层BepInEx.Preloader.Core/Unity 启动前接管进程做运行时修复与早期日志互操作层Runtimes/Unity/BepInEx.Unity.IL2CPP/Cpp2IL 解析GameAssembly生成桥接程序集钩子层Runtimes/Unity/BepInEx.Unity.IL2CPP/Hook/Dobby 与 Funchook 原生 detour拦截运行时调用核心层BepInEx.Core/Bootstrap/BaseChainloader扫plugins/按依赖排序实例化链路是这样走的doorstop 执行Doorstop.Entrypoint.Start()→Preloader.Run()应用 Harmony 修复、起早期日志 →Il2CppInteropManager.Initialize()用 Cpp2IL Il2CppInterop 把游戏元数据翻成 CoreCLR 能读的词典默认落在BepInEx/interop→IL2CPPChainloader挂上il2cpp_runtime_invoke钩子等到首个场景加载Internal_ActiveSceneChanged才触发插件加载。它和 Mono 后端共用同一个BaseChainloader基类这就是为什么插件加载逻辑改一处、两个后端同时受影响。一句话互操作桥是动态的——GameAssembly的 MD5 哈希记在assembly-hash.txt游戏一更新哈希失配桥就得重搭。启动失败速查 ⚠️7 个高频报错结论先行绝大多数 IL2CPP 问题不用重新编译看BepInEx/下日志的 Fatal/Error 条目就能定位。现象根因解法启动即退出加载 0 个插件CoreCLR 或GameAssembly加载失败Unity 版本不受支持看LogOutput.log的 Fatal 条目确认是 IL2CPP 构建日志出现Could not locate Il2Cpp game assembly找不到GameAssembly.dll/libil2cpp.so或游戏混淆核对游戏目录混淆游戏配UnhollowerDeobfuscationRegex更新游戏后大面积类型缺失互操作程序集哈希失配未重新生成保持UpdateInteropAssemblies true自动重建 interop日志出现signatures have been exhausted动态类型/委托耗尽 IL2CPP 签名池收敛动态类型创建统一走AddUnityComponent注册Linux 脚本报 PE32你跑的是 Windows 可执行文件Wine/Proton 场景Proton 游戏换 Windows 版 BepInEx脚本提示set executable_name to a valid name没填游戏可执行文件脚本里设executable_name或作第一参数传入报not compiled for x86 or x64游戏是 ARM 或其他架构构建IL2CPP 版不支持 ARM换 x64 游戏版本Wine 用户另注意一点Preloader会检测 CoreCLR 所需导出Wine 7.16 以下版本会明确警告可能崩溃。写插件前背下这 4 条 结论先行IL2CPP 插件翻车八成不是逻辑写错是动态做多了。Awake只做轻量绑定重资源丢给协程不裸反射建类型走AddUnityComponent注册哈希失配先重建互操作别急着怀疑代码签名耗尽就收敛动态类型确认 interop 最新BepInEx 在 IL2CPP 上跑得稳不稳不取决于插件写得多精巧而取决于 doorstop 入口、互操作桥、原生钩子这三块地基是否对齐。【免费下载链接】BepInExUnity / XNA game patcher and plugin framework项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑