illegalPrepareConstrainedRegion-MDA
Hinweis
Dieser Artikel gilt für das .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
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
{
…
}
}