相关疑难解决方法(0)

SecurityException:必须将ECall方法打包到系统模块中

我有一个(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实际上无法访问.

c# clr securityexception

36
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

clr ×1

securityexception ×1