我有一个正在构建动态方法的函数。作为此动态方法的一部分,它正在调用生成时已知的操作。作为一个最小的可重现示例,请考虑以下 C# 代码:
using System.Reflection.Emit;
static class Program {
static Action MakeAction(Action action) {
DynamicMethod method = new DynamicMethod("test", null, null);
ILGenerator generator = method.GetILGenerator();
generator.Emit(OpCodes.Call, action.Method);
generator.Emit(OpCodes.Ret);
return method.CreateDelegate<Action>();
}
static void Main() {
MakeAction(() => Console.WriteLine("hello"))();
}
}
当我运行它时,我得到一个 System.InvalidProgramException。这样做的正确方法是什么?