版本 2.3
一个用于在运行时修补、替换和装饰
.NET 和 Mono 方法的库。
关于
Harmony 为您提供了一种优雅且高级的方式来修改用 C# 编写的应用程序的功能。它在游戏中表现出色,并在以下游戏中得到广泛应用:
• Rust
• Rimworld
• 7 Days To Die
• Stardew Valley
• Subnautica
• Oxygen Not Included
• Besiege
• Cities:Skylines
• Kerbal Space Program
• Resonite
• BattleTech
• Slime Rancher
以及其他游戏如 Ravenfield、Sheltered、Staxel、The Ultimate Nerd Game、Total Miner、Unturned、SCP: Secret Laboratory 等。
它还被微软和谷歌用于 WPF 控件的单元测试,以及许多其他领域。
工作原理
如果您使用 C# 开发,并且您的代码作为模块/插件加载到主机应用程序中,您可以使用 Harmony 来修改该应用程序中所有可用程序集的功能。与其他仅允许您替换原始方法的补丁库不同,Harmony 更进一步,为您提供:
• 保持原始方法完整的方式
• 在原始方法之前和/或之后执行您的代码
• 使用 IL 代码处理器修改原始代码
• 多个 Harmony 补丁共存且互不冲突
• 在运行时工作,不触及任何文件
安装
如果您想要单个文件、依赖合并的程序集,您应该使用 Lib.Harmony nuget 包。这是首选方式。
如果您想自己提供依赖项,您应该使用 Lib.Harmony.Thin nuget 包。您可以获得更多控制权,但您需要负责在运行时提供所有引用。
文档
请查看文档并加入官方Discord 服务器。
贡献
我在这个项目及其支持上投入了数千小时。每一个小行动都有帮助:
• 成为 GitHub 赞助商或 Patreon 赞助人
• 为这个 Stack Overflow 回答点赞
• 在您的开发者社区中传播
本项目使用了 0x0ade 和 nike4613 开发的优秀 MonoMod.Core 库。
Harmony 1
Harmony 1 已被弃用,不再积极开发。其最新版本(v1.2.0.1)是稳定的,只包含一些小错误。如果您处于专门使用 Harmony 1 的环境中,请继续使用它。目前,Harmony 1.x 和 2.x 不兼容,不应混用。旧版文档仍可在 Wiki 中找到。