SecurityException: Metody ECall muszą być spakowane do modułu systemowego

Mam funkcję (C #) podobną do następującej.

private static bool SpecialCase = false;

public void Foo()
{
    if (SpecialCase)
    {
        InternalMethod();
        return;
    }

    Console.WriteLine();
}

[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void InternalMethod();

Kiedy wykonuję to za pomocą .NET Framework 4 wewnątrz debugera, metoda z powodzeniem drukuje pusty wiersz do konsoli i zwraca. Kiedy wykonuję go poza debuggerem, zgłasza wyjątek z następującym komunikatem:

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

Wygląda na to, że wyjątek jest generowany, gdy kompilator JIT kompiluje metodę, a nie gdy (if)InternalMethod jest nazywany. Czy jest coś, co mogę zrobić (np. Atrybuty), aby poinformować CLI, aby nie rzucałSecurityExceptionlub opóźnij wyjątek, dopóki metoda nie zostanie faktycznie wywołana?

Uwaga dodatkowa dotycząca przypadku użycia: TheSpecialCase pole jest faktycznie fałszywe, gdy działa z Microsoft .NET Framework, a true, gdy działa w innej (specyficznej) implementacji CLI. W przypadku korzystania z Microsoft .NET Framework wywołanie doInternalMethod jest nieosiągalny.

questionAnswers(2)

yourAnswerToTheQuestion