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