Reflection.Emit を使用してアセンブリを作成していますが、特別なコールバックを呼び出す必要があります。
コードの簡略版は次のとおりです。
public void Call(ILGenerator il, Delegate action)
{
il.Emit(OpCodes.Call, action.Method);
}
public static void DoStuff()
{
Console.WriteLine("Action invoked!");
}
Call(CurrentMethod.ILGenerator, DoStuff);
このコードは期待どおりに機能します。
ただし、次のようにラムダ式を渡したいです。
Call(CurrentMethod.ILGenerator, () => Console.WriteLine("test"));
今回は、次の例外がスローされます。
System.MethodAccessException : メソッド '.Run()' によるメソッド 'Compiler.Test.ImportedFunctions.b__0()' へのアクセスに失敗しました。
それを回避する方法はありますか?