我正在使用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