以前に発行した動的メソッドを呼び出すコードを発行しようとしています。
iLGenerator.Emit(OpCodes.Call, dynamicMethod.GetMethodInfo());
「MethodInfo は実行時の MethodInfo オブジェクトでなければなりません」という例外が発生します。
動的メソッドをランタイムメソッドに変換する方法はありますか?
以前に発行した動的メソッドを呼び出すコードを発行しようとしています。
iLGenerator.Emit(OpCodes.Call, dynamicMethod.GetMethodInfo());
「MethodInfo は実行時の MethodInfo オブジェクトでなければなりません」という例外が発生します。
動的メソッドをランタイムメソッドに変換する方法はありますか?
私が言えることから、DynamicMethod
を使用してデリゲートに既にコンパイルしていますCreateDelegate
。ただし、DynamicMethod
Emit のパラメータとしてオブジェクトを直接使用するだけであれば、動作するはずです。デモンストレーション:
using System.Reflection;
using System.Reflection.Emit;
public class Program
{
public static void Main(string[] args)
{
var dynMethod = new DynamicMethod("test1", typeof(void), Type.EmptyTypes);
var gen = dynMethod.GetILGenerator();
gen.EmitWriteLine("Test");
gen.Emit(OpCodes.Ret);
var dynMethod2 = new DynamicMethod("test2", typeof(void), Type.EmptyTypes);
gen = dynMethod2.GetILGenerator();
gen.Emit(OpCodes.Call, dynMethod);
gen.Emit(OpCodes.Ret);
var method2 = (Action)dynMethod2.CreateDelegate(typeof(Action));
method2();
}
}