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();

Когда я выполняю это с помощью.NET Framework 4 внутри отладчика, метод успешно выводит пустую строку на консоль и возвращается. Когда я выполняю его вне отладчика,он выдает исключение со следующим сообщением:

System.Security.SecurityException: ECall methods must be packaged into a system module.

Похоже, что исключение возникает, когда JIT-компилятор компилирует метод, а не когда (, если)InternalMethodназывается. Могу ли я что-нибудь сделать (, например. атрибуты ), чтобы указать CLI либо не выдавать SecurityException, либо отложить исключение до фактического вызова метода?

Дополнительное примечание по варианту использования :Поле SpecialCaseфактически имеет значение false при работе с Microsoft.NET Framework и значение true при работе с другой (конкретной )реализацией интерфейса командной строки. При работе под Microsoft.NET Framework вызов InternalMethodфактически недоступен.

36
задан Sam Harwell 1 July 2012 в 22:08
поделиться