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//catch
fault
/finally
filter
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
{
…
}
}