我有类似以下内容的(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
被调用。 有什么我可以做(例如属性)告诉CLI要么不扔SecurityException
,或延迟异常,直到该方法实际上是叫什么名字?
于使用情况,侧面说明:本SpecialCase
根据不同的(特定)实施CLI的运行时的Microsoft .NET Framework中运行时,和真正的现场是有效错误。 当在Microsoft .NET Framework的运行,调用InternalMethod
实际上是不可达。