如何使用Mono.Cecil调用泛型方法

时间:2014-11-14 12:03:14

标签: il mono.cecil

我正在尝试导入一个方法及其IL代码,如
callvirt instance !!0 [UnityEngine]UnityEngine.GameObject::AddComponent<class RealMono>()
RealMono是我创建的MonoBehavior 我不知道如何获得通用方法。

1 个答案:

答案 0 :(得分:0)

它有效!!

using System.Reflection;

...

MemberInfo[] ms = typeof(GameObject).GetMember("AddComponent*", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance);
MethodInfo mm = null;
foreach(MemberInfo m in ms) {
    if (((MethodInfo)m).IsGenericMethod) {
        mm = (MethodInfo)m;
        mm = mm.MakeGenericMethod(mm);
        break;
    }
}
il.InsertBefore(method.Body.Instructions[0], il.Create(OpCodes.Callvirt, assembly.MainModule.Import(mm)));