我有一个(C#)函数类似于以下.
private static bool SpecialCase = false;
public void Foo()
{
if (SpecialCase)
{
InternalMethod();
return;
}
Console.WriteLine();
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void InternalMethod();
Run Code Online (Sandbox Code Playgroud)
当我在调试器内部使用.NET Framework 4执行此操作时,该方法成功地将空白行打印到控制台并返回.当我在调试器外部执行它时,它会抛出一个带有以下消息的异常:
System.Security.SecurityException: ECall methods must be packaged into a system module.
Run Code Online (Sandbox Code Playgroud)
当JIT编译器编译方法而不是InternalMethod调用when(if)时,似乎抛出了异常.有什么我可以做的(例如属性)告诉CLI要么不抛出SecurityException,要么延迟异常直到实际调用该方法?
关于用例的附注:SpecialCase使用Microsoft .NET Framework运行时,该字段实际上是错误的,而在CLI的不同(特定)实现下运行时,该字段为true.在Microsoft .NET Framework下运行时,调用InternalMethod实际上无法访问.