一. Harmony工作原理
利用C#运行时Runtime的反射机制,动态加载dll中的方法,字段,属性,实现对DLL方法的重写和代码注入。
二. Harmony下载及安装
通过创建Harmony实例,调用PatchAll()方法实现补丁类的加载
#加载已经实现的补丁类,重写原有DLL中方法
var harmonyPatch = new Harmony("patch");
harmonyPatch.PatchAll();
三. Harmony前置注入,后置注入
通过在类实例上添加Harmony注解,实现补丁类,添加Prefix,Postfix实现对调用方法前,调用方法后的重写,返回值true/false决定原DLL方法是否被执行。
[HarmonyPatch(typeof(OriginalClass), "OriginalMethod")]
public class MyHarmonyPatch
{public static bool Prefix(int ___a, string ___c){// 在这里编写补丁的逻辑Console.WriteLine("Patched method called!");Console.WriteLine(___c);return true; // 返回false将阻止原方法执行}public static bool Postfix(){// 在这里编写补丁的逻辑Console.WriteLine("Patched method called!");Console.WriteLine(___c);return true; // 返回false将阻止原方法执行}
}
四. Harmony获取类实例,私有属性
方法中创建___instance实现对实例的获取,等效与this。
方法中创建___a实现对实例属性的获取。
五. Harmony-AccessTool
使用AccessTool对类进行反射,动态调用目标类的方法。