共用方式為


illegalPrepareConstrainedRegion MDA

注意

本文專屬於 .NET Framework。 它不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。

RuntimeHelpers.PrepareConstrainedRegions 方法呼叫並未緊接在例外狀況處理常式的 try 陳述式前面時,illegalPrepareConstrainedRegion Managed 偵錯助理 (MDA) 就會啟動。 這項限制屬於 MSIL 層級,因此可允許在呼叫和 try 之間具有不產生程式碼的來源,例如註解。

徵兆

限制的執行區域 (CER) 永遠不會被視為這類執行區執,而是當成簡單的例外狀況處理區塊 (finallycatch)。 因此,這個區域不會在發生記憶體不足狀況或執行緒中止的情況下執行。

原因

未正確地遵循 CER 的準備模式。 這是一個錯誤事件。 PrepareConstrainedRegions用來將例外狀況處理程式標示為在其///faultfinallycatchfilter區塊中引進 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
    {
        …
    }
}

另請參閱