Delen via


illegalPrepareConstrainedRegion MDA

Notitie

Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.

De illegalPrepareConstrainedRegion beheerde foutopsporingsassistent (MDA) wordt geactiveerd wanneer een RuntimeHelpers.PrepareConstrainedRegions methodeaanroep niet direct voorafgaat aan de try instructie van de uitzonderingshandler. Deze beperking is op MSIL-niveau, dus het is toegestaan om niet-code genererende bron tussen de aanroep en de try, zoals opmerkingen, te hebben.

Symptomen

Een beperkte uitvoeringsregio (CER) die nooit als zodanig wordt behandeld, maar als een eenvoudig afhandelingsblok voor uitzonderingen (finally of catch). Als gevolg hiervan wordt de regio niet uitgevoerd in het geval van een out-of-memory-voorwaarde of een thread wordt afgebroken.

Oorzaak

Het voorbereidingspatroon voor een CER wordt niet correct gevolgd. Dit is een fout. De PrepareConstrainedRegions methode-aanroep die wordt gebruikt om uitzonderingshandlers te markeren als introductie van een CER in hun//catchfault/finallyfilter blokken, moet direct vóór de try instructie worden gebruikt.

Oplossing

Zorg ervoor dat de aanroep PrepareConstrainedRegions direct vóór de try instructie plaatsvindt.

Effect op de runtime

Deze MDA heeft geen effect op de CLR.

Uitvoer

De MDA geeft de naam weer van de methode die de PrepareConstrainedRegions methode aanroept, de MSIL-offset en een bericht dat aangeeft dat de aanroep niet direct voorafgaat aan het begin van het try-blok.

Configuratie

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

Opmerking

In het volgende codevoorbeeld ziet u het patroon dat ervoor zorgt dat deze MDA wordt geactiveerd.

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

Zie ook