我正在使用Reflection.Emit创建程序集,我希望它能调用特殊的回调函数。从反射生成的程序集调用lambda
下面的代码的简化版本:
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);
此代码按预期工作而已。
然而,我想通过lambda表达式,如下所示:
Call(CurrentMethod.ILGenerator,() => Console.WriteLine("test"));
这一次的以下抛出异常:
System.MethodAccessException:通过方法尝试” .RUN() '访问方法'Compiler.Test.ImportedFunctions.b__0()'失败。
有没有办法解决它?
代码是否完全信任? – Greg 2013-03-20 17:33:10
@Greg,程序集是使用'AppDomain.CurrentDomain.DefineDynamicAssembly(名称,AssemblyBuilderAccess.RunAndSave)'创建的。如何检查信任设置? – Impworks 2013-03-20 17:43:45
@Impworks:如果你能做到这一点,那么你已经完全信任:) – leppie 2013-03-20 17:48:14