Condividi tramite


MDA illegalPrepareConstrainedRegion

Nota

Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, incluse .NET 6 e versioni successive.

L'assistente al debug gestito illegalPrepareConstrainedRegion viene attivato quando una chiamata al metodo RuntimeHelpers.PrepareConstrainedRegions non precede immediatamente l'istruzione try del gestore di eccezioni. Poiché questa restrizione è a livello MSIL, è consentita la presenza di un'origine che non genera codice tra la chiamata e l'istruzione try, ad esempio commenti.

Sintomi

Area a esecuzione vincolata che non viene mai considerata come tale, ma come semplice blocco di gestione delle eccezioni (finally o catch). Di conseguenza, l'area non viene eseguita nel caso di una condizione di memoria insufficiente o di interruzione del thread.

Causa

Il modello di preparazione per un'area a esecuzione vincolata non è stato applicato correttamente. Si tratta di un evento di errore. La PrepareConstrainedRegions chiamata al metodo usata per contrassegnare i gestori di eccezioni come introduzione di un cer nei relativi//catchfault/finallyfilter blocchi deve essere usata immediatamente prima dell'istruzione .try

Risoluzione

Assicurarsi che la chiamata a PrepareConstrainedRegions avvenga immediatamente prima dell'istruzione try.

Effetto sull'ambiente di esecuzione

L'assistente al debug gestito non ha alcun effetto su CLR.

Output

L'assistente al debug gestito visualizza il nome del metodo che chiama il metodo PrepareConstrainedRegions, l'offset MSIL e un messaggio indicante che la chiamata non precede immediatamente l'inizio del blocco try.

Impostazione

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

Esempio

Il codice di esempio seguente mostra il modello che causa l'attivazione di questo assistente al debug gestito.

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

Vedi anche