外观
Loader 概览
StudioModLoader.dll 是框架的运行时中枢。Studio 启动时它最先醒来,负责把整个框架撑起来,然后把控制权交还给 Studio。
职责
| 模块 | 做什么 |
|---|---|
Bootstrapper | 启动引导:注册依赖解析器、创建全局宿主、应用核心补丁 |
LoaderManager | 扫描 Mods/ 目录、实例化插件、托管 F10 控制台 |
MenuInjector | 在顶部菜单栏注入 Mods 下拉菜单 |
FrameworkUpdateService | 检查与安装框架自身更新(内测版) |
TelemetryService | 匿名遥测上报(仅内测版构建) |
启动链路
text
Studio.exe 启动
│
▼
Studio.Startup.dll → InitializationSequenceService.Initialize()
│ ← Installer 在这里插入了 Bootstrapper.Initialize() 调用
▼
Bootstrapper.Initialize()
├─ 注册全局程序集解析器
├─ 创建 [StudioModLoader] 全局 GameObject(DontDestroyOnLoad)
├─ 挂载 LoaderManager
└─ 应用核心补丁
│
▼
LoaderManager 扫描并加载插件 → 注入 Mods 菜单 → 等待 F10插件扫描路径
Loader 按顺序扫描以下目录,每个目录还会再检查第一层子目录:
<Studio 安装目录>\Mods\%LOCALAPPDATA%\Studio 2.0\Mods\
子目录形式让插件可以把自己的依赖 DLL 放在一起,例如:
text
Mods/
YourMod/
YourMod.dll
YourMod.Dependency.dll加载流程
对每个找到的插件程序集:
- 扫描
StudioPlugin的子类,读取[StudioPlugin]元数据。 - 实例化插件对象,注入
Info、Config、Logger、HarmonyInstance。 - 调用
HarmonyInstance.PatchAll()应用插件自带的补丁。 - 调用
OnLoaded()。 - 记录结果(成功 / 异常 + 堆栈 + 补丁数量),供 F10 控制台展示。
单个插件加载失败不会影响其他插件,也不会中断 Studio 启动。
相关文档
- 启动引导 ——
Bootstrapper的细节与核心补丁 - 菜单注入 ——
Mods菜单是怎么长出来的 - F10 运行时控制台 —— 排查问题的主战场