SecurityException: ECall メソッドはシステム モジュールにパッケージ化する必要があります 質問する

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.

例外は、(if) が呼び出されたときではなく、JIT コンパイラがメソッドをコンパイルしたときにスローされるようです。 をスローしないように、またはメソッドが実際に呼び出されるまで例外を遅らせるようにInternalMethodCLI に指示するためにできること (たとえば、属性) はありますか?SecurityException

使用例に関する補足事項: このSpecialCaseフィールドは、Microsoft .NET Framework で実行している場合は事実上 false であり、CLI の別の (特定の) 実装で実行している場合は true です。Microsoft .NET Framework で実行している場合、 への呼び出しはInternalMethod事実上到達不能です。

ベストアンサー1

[ComImport]クラス宣言に属性を追加する

おすすめ記事