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
фактически недоступен