项目作者: MonoMod
项目描述 :
A C# modding swiss army knife, powered by cecil.
高级语言: C#
项目地址: git://github.com/MonoMod/MonoMod.git
MonoMod

General purpose .NET assembly modding “basework”, powered by cecil.
MIT-licensed.

GitHub: All |
NuGet: Patcher |
NuGet: Utils |
NuGet: RuntimeDetour |
NuGet: HookGen |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
… or download fresh build artifacts for the last commit.
Sections
Introduction
MonoMod is a modding “basework” (base tools + framework).
Mods / mod loaders for the following games are already using it in one way or another:
It consists of the following modular components:
- MonoMod.Patcher: The ahead-of-time MonoMod patcher and relinker.
- MonoMod.Utils: Utilities and helpers that not only benefit MonoMod, but also mods in general.
It contains classes such as PlatformDetection
, FastReflectionHelper
, DynamicMethodHelper
, DynamicMethodDefinition
, DynDll
and the ModInterop
namespace. - MonoMod.DebugIL: Enable IL-level debugging of third-party assemblies in Visual Studio / MonoDevelop.
- MonoMod.Core: The core upon which runtime method detouring is built.
- MonoMod.RuntimeDetour: A flexible and easily extensible runtime detouring library, supporting x86/x86_64 on .NET Framework, .NET Core, and Mono.
- MonoMod.RuntimeDetour.HookGen: A utility to generate a “hook helper .dll” for any IL assembly. This allows you to hook
methods in runtime mods as if they were events. Built with MonoMod and RuntimeDetour. - MonoMod.Backports: A collection of BCL backports, enabling the use of many new language and library features, as far back as .NET Framework 3.5.
Why?
- Cross-version compatibility, even with obfuscated assemblies.
- Cross-platform compatibility, even if the game uses another engine (f.e. Celeste uses XNA on Windows, FNA on macOS and Linux).
- Use language features which otherwise wouldn’t be supported (f.e. C# 7 in Unity 4.3).
- Patch on the player’s machine with a basic mod installer. No need to pre-patch, no redistribution of game data, no copyright violations.
- With HookGen, runtime hooks are as simple as
On.Namespace.Type.Method += (orig, a, b, c) => { /* ... */ }
- With HookGen IL, you can manipulate IL at runtime and even inline C# delegate calls between instructions.
- Modularity allows you to mix and match. Use only what you need!