Reflection.Emit을 사용하여 어셈블리를 만들고 있는데 특수 콜백을 호출하려고합니다. 예상대로Reflection 생성 어셈블리에서 람다 호출
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() '이 (가) 실패했습니다.
해결 방법이 있습니까?
코드가 완전하게 신뢰되고 있습니까? – Greg
@Greg, 어셈블리는'AppDomain.CurrentDomain.DefineDynamicAssembly (name, AssemblyBuilderAccess.RunAndSave)'로 생성됩니다. 신뢰 설정을 어떻게 확인합니까? – Impworks
@Impworks : 당신이 이미 할 수 있다면, 당신은 완전 신뢰하에 이미 실행 중입니다 :) – leppie