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.
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
{
…
}
}