illegalPrepareConstrainedRegion MDA

Note

Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.

Der illegalPrepareConstrainedRegion verwaltete Debugging-Assistent (Managed Debugging Assistant, MDA) wird aktiviert, wenn ein RuntimeHelpers.PrepareConstrainedRegions Methodenaufruf nicht unmittelbar vor der try Anweisung des Ausnahmehandlers steht. Diese Einschränkung befindet sich auf MSIL-Ebene, daher ist es zulässig, dass zwischen dem Aufruf und dem tryAufruf keine Codegenerierungsquelle vorhanden ist, z. B. Kommentare.

Symptome

Ein eingeschränkter Ausführungsbereich (CER), der nie als solche behandelt wird, sondern als einfacher Ausnahmebehandlungsblock (finally oder catch). Dies führt dazu, dass der Bereich nicht ausgeführt wird, wenn eine Nichtspeicherbedingung oder ein Thread abgebrochen wird.

Ursache

Das Vorbereitungsmuster für eine CER wird nicht richtig befolgt. Dies ist ein Fehlerereignis. Der PrepareConstrainedRegions Methodenaufruf, der verwendet wird, um Ausnahmehandler als Einführung einer CER in ihren//catchfault/finallyfilter Blöcken zu kennzeichnen, muss unmittelbar vor der try Anweisung verwendet werden.

Auflösung

Stellen Sie sicher, dass der Aufruf PrepareConstrainedRegions unmittelbar vor der try Anweisung erfolgt.

Effekt auf die Laufzeit

Diese MDA hat keine Auswirkungen auf die CLR.

Output

MDA zeigt den Namen der Methode an, die die PrepareConstrainedRegions Methode aufruft, den MSIL-Offset und eine Meldung, die angibt, dass der Aufruf nicht unmittelbar vor dem Anfang des Try-Blocks steht.

Konfiguration

<mdaConfig>
  <assistants>
    <illegalPrepareConstrainedRegion/>
  </assistants>
</mdaConfig>

Example

Im folgenden Codebeispiel wird das Muster veranschaulicht, das bewirkt, dass diese MDA aktiviert wird.

void MethodWithInvalidPCR()
{
    RuntimeHelpers.PrepareConstrainedRegions();
    Object o = new Object();
    try
    {
        …
    }
    finally
    {
        …
    }
}

Siehe auch