illegalPrepareConstrainedRegion MDA

Note

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

Asisten illegalPrepareConstrainedRegion penelusuran kesalahan terkelola (MDA) diaktifkan ketika RuntimeHelpers.PrepareConstrainedRegions panggilan metode tidak segera mendahului try pernyataan handler pengecualian. Pembatasan ini berada di tingkat MSIL, sehingga diizinkan untuk memiliki sumber yang tidak menghasilkan kode antara panggilan dan try, seperti komentar.

Gejala

Wilayah eksekusi terkendala (CER) yang tidak pernah diperlakukan seperti itu, tetapi sebagai blok penanganan pengecualian sederhana (finally atau catch). Sebagai konsekuensinya, wilayah tidak berjalan jika kondisi di luar memori atau utas dibatalkan.

Penyebab

Pola persiapan untuk CER tidak diikuti dengan benar. Ini adalah peristiwa kesalahan. Panggilan PrepareConstrainedRegions metode yang digunakan untuk menandai handler pengecualian sebagai memperkenalkan CER di blok mereka//catchfault/finallyfilter harus digunakan segera sebelum try pernyataan.

Resolution

Pastikan bahwa panggilan terjadi PrepareConstrainedRegions segera sebelum try pernyataan.

Efek pada Runtime

MDA ini tidak berpengaruh pada CLR.

Hasil

MDA menampilkan nama metode yang memanggil PrepareConstrainedRegions metode , offset MSIL, dan pesan yang menunjukkan panggilan tidak segera mendahului awal blok coba.

Konfigurasi

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

Example

Contoh kode berikut menunjukkan pola yang menyebabkan MDA ini diaktifkan.

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

Baca juga