動的メソッドを構築している関数があります。この動的メソッドの一部として、生成時に既知のアクションを呼び出しています。最小限の再現可能な例として、次の 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 が発生します。これを行う正しい方法は何ですか?