SecurityException: ECall-Methoden müssen in ein Systemmodul gepackt werden

Ich habe eine (C #) - Funktion ähnlich der folgenden.

private static bool SpecialCase = false;

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

    Console.WriteLine();
}

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

Wenn ich dies mit .NET Framework 4 innerhalb des Debuggers ausführe, druckt die Methode erfolgreich eine leere Zeile an die Konsole und gibt sie zurück. Wenn ich es außerhalb des Debuggers ausführe, löst es eine Ausnahme mit der folgenden Meldung aus:

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

Es scheint, dass die Ausnahme ausgelöst wird, wenn der JIT-Compiler die Methode kompiliert, im Gegensatz zu when (if).InternalMethod wird genannt. Gibt es irgendetwas, das ich tun kann (z. B. Attribute), um der CLI mitzuteilen, dass sie die nicht werfen soll?SecurityException, oder verzögern Sie die Ausnahme, bis die Methode tatsächlich aufgerufen wird?

Randnotiz zum Anwendungsfall: DieSpecialCase Feld ist effektiv falsch, wenn es mit Microsoft .NET Framework ausgeführt wird, und wahr, wenn es unter einer anderen (spezifischen) Implementierung der CLI ausgeführt wird. Bei Ausführung unter Microsoft .NET Framework erfolgt der Aufruf vonInternalMethod ist praktisch nicht erreichbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage