illegalPrepareConstrainedRegion MDA
注意
本文專屬於 .NET Framework。 它不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。
RuntimeHelpers.PrepareConstrainedRegions 方法呼叫並未緊接在例外狀況處理常式的 try
陳述式前面時,illegalPrepareConstrainedRegion
Managed 偵錯助理 (MDA) 就會啟動。 這項限制屬於 MSIL 層級,因此可允許在呼叫和 try
之間具有不產生程式碼的來源,例如註解。
徵兆
限制的執行區域 (CER) 永遠不會被視為這類執行區執,而是當成簡單的例外狀況處理區塊 (finally
或catch
)。 因此,這個區域不會在發生記憶體不足狀況或執行緒中止的情況下執行。
原因
未正確地遵循 CER 的準備模式。 這是一個錯誤事件。 PrepareConstrainedRegions用來將例外狀況處理程式標示為在其///fault
finally
catch
filter
區塊中引進 CER 的方法呼叫,必須緊接在語句之前try
使用。
解決方法
請確定對 PrepareConstrainedRegions 的呼叫緊接在 try
陳述式前面。
對執行階段的影響
此 MDA 對 CLR 沒有影響。
輸出
MDA 會顯示呼叫 PrepareConstrainedRegions 方法的方法名稱、MSIL 位移,以及指出呼叫並未緊接在 try 區塊開頭前面的訊息。
組態
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion/>
</assistants>
</mdaConfig>
範例
下列程式碼範例示範會導致此 MDA 啟動的模式。
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}