c#,reflection.emit正在努力

c#,reflection.emit正在努力,c#,dynamic,reflection,invoke,emit,C#,Dynamic,Reflection,Invoke,Emit,我想尝试一下System.Reflection.Emit的工作原理,但最终我遇到了一些问题。我想创建(使用Emit)一些简单的类,如下所示: using System; namespace emit { class Builder { private String name; public Builder(String builderName) { name = builderName;

我想尝试一下
System.Reflection.Emit
的工作原理,但最终我遇到了一些问题。我想创建(使用
Emit
)一些简单的类,如下所示:

using System;

namespace emit
{
    class Builder
    {
        private String name;

        public Builder(String builderName)
        {
            name = builderName;
        }

        public override int GetHashCode()
        {
            return name.GetHashCode();
        }

        public override string ToString()
        {
            return this.name;
        }
    }
}
我已经学习了一些教程,并成功地创建了动态库。我已将该库保存在磁盘上,然后使用反射加载它。我能够过滤它的类型、构造函数和方法。我还成功地调用了传递所需
字符串的构造函数。然而,当我试图调用任何方法时都会出现问题-
System.Reflection.targetingException

下面是我如何实现的
GetHashCode()

tBuilder
是我正在创建的
TypeBuilder

保存程序集并使用
ILDSASM查看后,如下所示:

以及
EditModule.dll

不幸的是,此方法无法调用。代码如下:

                Type dType = asm.GetTypes()[0];
                ConstructorInfo dConstructor = dType.GetConstructor(new Type[] { typeof(string) });
                object dObject = dConstructor.Invoke(new object[] { "Pawel" });
                MethodInfo[] dMethods = dType.GetMethods();
                foreach(var mi in dMethods)
                {
                    Console.WriteLine(mi.Name);
                }
                //method with `0` index is `GetHashCode()`
                dMethods[0].Invoke(dObject, null);
有人知道我可能做错了什么吗?

这个片段

mHashGenerator.Emit(OpCodes.Ldfld, simpleName);
正在尝试获取字段值,但您忘记了要获取该值,它需要一个实例。由于您正在构建的方法是一个实例方法,this是该方法隐藏的第一个参数,因此要获取
this.name
的值,您应该使用以下命令

mHashGenerator.Emit(OpCodes.Ldarg_0);
mHashGenerator.Emit(OpCodes.Ldfld, simpleName);

TargetInvocationException的内部异常是什么?它类似于CLR环境捕获了不适当的程序。StackTrace显示,
builderMittype.GetHashCode()
导致了这种情况。没错!谢谢,我误解了
调用约定
枚举的含义。
mHashGenerator.Emit(OpCodes.Ldarg_0);
mHashGenerator.Emit(OpCodes.Ldfld, simpleName);