Megosztás a következőn keresztül:


illegalPrepareConstrainedRegion MDA

Feljegyzés

Ez a cikk a .NET-keretrendszer vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.

A illegalPrepareConstrainedRegion felügyelt hibakeresési segéd (MDA) akkor aktiválódik, ha egy RuntimeHelpers.PrepareConstrainedRegions metódushívás nem előzi meg azonnal a try kivételkezelő utasítását. Ez a korlátozás az MSIL szintjén van, ezért megengedett, hogy a hívás és a trymegjegyzések között ne kódgeneráló forrás legyen.

Hibajelenségek

Korlátozott végrehajtási régió (CER), amelyet soha nem kezelnek ilyenként, hanem egyszerű kivételkezelési blokkként (finally vagy catch). Ennek következtében a régió nem fut memóriakihasználtság vagy szál megszakítása esetén.

Ok

A CER-hez tartozó előkészítési minta nem követi megfelelően. Ez egy hibaesemény. A PrepareConstrainedRegions kivételkezelők blokkokban//catchfault/finallyfilter való bevezetésének megjelölésére használt metódushívást közvetlenül az try utasítás előtt kell használni.

Resolution (Osztás)

Győződjön meg arról, hogy a hívás PrepareConstrainedRegions közvetlenül az try utasítás előtt történik.

Effektus a futtatókörnyezetre

Ez az MDA nincs hatással a CLR-re.

Hozam

Az MDA megjeleníti a metódust hívó PrepareConstrainedRegions metódus nevét, az MSIL-eltolást, és egy üzenet, amely jelzi, hogy a hívás nem előzi meg közvetlenül a próbablokk elejét.

Konfiguráció

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

Példa

Az alábbi példakód azt a mintát mutatja be, amely az MDA aktiválását okozza.

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

Lásd még