实际评估MonoMod时,我先确认它解决的具体问题:C# 改装瑞士军刀,由 cecil 提供支持。在日常自动化场景里,常见问题是输入边界、依赖和失败处理如果不清楚就很难稳定复用,这正是评估时需要盯住的地方。更实际的做法是用一项范围明确的真实任务完成最小试跑,同时核对配置时间、输出质量、异常信息和维护痕迹,不要直接在关键项目上。如果团队属于愿意先做小范围验证并复查原始文档的团队,它有继续测试的理由;否则先看替代方案会更省时间。
MonoMod
通用.NET 组装改装“基础工作”,由 cecil 提供支持。
MIT-licensed.
| NuGet:实用程序 | NuGet: RuntimeDetour | NuGet: HookGen |
|--|--|--|--|--|
| | | |
| | | |
...或下载最新的构建工件以进行最后一次提交。
部分
简介
MonoMod 是一个模组“基础工作”(基础工具+框架)。
以下游戏的模组/模组加载器已经以某种方式使用它:
- 泰拉瑞亚:tModLoader、TerrariaHooks
- 空洞骑士:HollowKnight.Modding
- 塞莱斯特:珠穆朗玛峰
- 下雨的风险2:BepInExPack (BepInEx + MonoMod + R2API)
- 进入地牢:修改地牢
- 雨世界:RainDB 来自 BepInEx
- 完全准确的战斗模拟器:TABS-多人游戏
- 盐与庇护所:Salt.Modding
- Nimbatus:Nimbatus-Mods 通过偏向
- 无尽的地牢:DungeonOfTheEndless-Mod 通过偏爱
- FEZ:FEZMod(已失效)
- 还有更多! 如果你的 mod 使用 MonoMod,请在 Discord 上告诉我!
它由以下模块化组件组成:
- MonoMod.Patcher:提前的 MonoMod 修补程序和重新链接程序。
- MonoMod.Utils:实用程序和帮助程序不仅对 MonoMod 有利,而且对一般模组也有利。
它包含
PlatformDetection、FastReflectionHelper、DynamicMethodHelper、DynamicMethodDefinition、DynDll 和 ModInterop 命名空间等类。
- MonoMod.DebugIL:在 Visual Studio / MonoDevelop 中启用第三方程序集的 IL- 级别调试。
- MonoMod.Core:构建运行时方法绕行的核心。
- MonoMod.RuntimeDetour:一个灵活且易于扩展的运行时绕行库,支持 .NET Framework、.NET Core 和 Mono 上的 x86/x86_64。
- MonoMod.RuntimeDetour.HookGen:为任何 IL 程序集生成“hook helper .dll”的实用程序。这允许你挂钩
运行时 mod 中的方法就像事件一样。使用 MonoMod 和 RuntimeDetour 构建。
- MonoMod.Backports:BCL 向后移植的集合,支持使用许多新的语言和库功能,最早可以追溯到 .NET Framework 3.5。
为什么?
- 跨版本兼容性,即使是混淆的程序集。
- 跨平台兼容性,即使游戏使用其他引擎(f.e。Celeste 在 Windows 上使用 XNA,在 macOS 和 Linux 上使用 FNA)。
- 使用否则不支持的语言功能(f.e。Unity 4.3 中的 C# 7)。
- 使用基本模组安装程序在玩家的机器上打补丁。无需预先打补丁,无需重新分发游戏数据,无版权侵犯。
- 使用 HookGen,运行时挂钩就像
On.Namespace.Type.Method += (orig, a, b, c) => { /* ... */ } 一样简单
- 使用 HookGen IL,您可以在运行时操作 IL,甚至可以在指令之间进行内联 C# 委托调用。
- 模块化允许您混合搭配。只使用您需要的!