Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.
Asisten debugging terkelola (MDA) illegalPrepareConstrainedRegion diaktifkan ketika panggilan metode RuntimeHelpers.PrepareConstrainedRegions tidak segera mendahului pernyataan try 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 terjadi kondisi di luar memori atau utas dibatalkan.
Penyebab
Pola persiapan untuk CER tidak diikuti dengan benar. Ini adalah peristiwa kesalahan. Panggilan metode PrepareConstrainedRegions yang digunakan untuk menandai penangan pengecualian sebagai pengenalan CER di blok catch/finally/fault/filter mereka harus digunakan segera sebelum pernyataan try.
Resolusi
Pastikan bahwa panggilan untuk PrepareConstrainedRegions terjadi segera sebelum pernyataan try.
Efek pada Runtime
MDA ini tidak berpengaruh pada runtime bahasa umum.
Output
MDA menampilkan nama metode yang memanggil metode PrepareConstrainedRegions, offset MSIL, dan pesan yang menunjukkan panggilan tidak segera mendahului awal blok coba.
Konfigurasi
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion/>
</assistants>
</mdaConfig>
Contoh
Contoh kode berikut menunjukkan pola yang menyebabkan MDA ini diaktifkan.
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}