Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Note
Ez a cikk a .NET-keretrendszerre vonatkozik. 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.
Symptoms
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.
A probléma oka
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
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.
Kimenet
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>
Example
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
{
…
}
}