illegalPrepareConstrainedRegion-MDA

Der illegalPrepareConstrainedRegion-MDA (Assistent für verwaltetes Debuggen) wird aktiviert, wenn ein RuntimeHelpers.PrepareConstrainedRegions-Methodenaufruf der try-Anweisung des Ausnahmehandlers nicht direkt vorausgeht. Diese Einschränkung befindet sich auf MSIL-Ebene, daher ist es zulässig, über nicht codeerzeugende Datenquellen zwischen dem Aufruf und try, beispielsweise Kommentare, zu verfügen.

Symptome

Ein eingeschränkter Ausführungsbereich (CER), der nie als solcher behandelt wird, sondern als ein einfacher Block zur Ausnahmebehandlung (finally oder catch). Daher wird der Bereich nicht im Fall einer Out-of-Memory-Bedingung oder eines Threadabbruchs ausgeführt.

Ursache

Das Muster zur Vorbereitung für einen CER wird nicht richtig befolgt. Dies ist ein Fehlerereignis. Der PrepareConstrainedRegions-Methodenaufruf, der verwendet wird, um Ausnahmehandler als Einführung in einen CER in den catch/finally/fault/filter-Blöcken zu markieren, muss direkt vor der try-Anweisung verwendet werden.

Lösung

Stellen Sie sicher, dass der Aufruf von PrepareConstrainedRegions unmittelbar vor der try-Anweisung geschieht.

Auswirkungen auf die Laufzeit

Dieser MDA hat keine Auswirkungen auf die CLR.

Ausgabe

Der MDA zeigt den Namen der Methode an, die die PrepareConstrainedRegions-Methode, den MSIL-Offset und eine Meldung aufruft, die angibt, dass der Aufruf dem Beginn des Try-Blocks nicht direkt vorausgeht.

Konfiguration

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

Beispiel

Das folgende Codebeispiel veranschaulicht das Muster, das bewirkt, dass dieser MDA aktiviert wird.

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

Siehe auch