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 при запуске под другой (определенной) реализацией CLI. При работе под Microsoft .NET Framework вызовInternalMethod фактически недоступен

Ответы на вопрос(2)

Ваш ответ на вопрос