illegalPrepareConstrainedRegion MDA
Uwaga
Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.
Asystent illegalPrepareConstrainedRegion
zarządzanego debugowania (MDA) jest aktywowany, gdy RuntimeHelpers.PrepareConstrainedRegions wywołanie metody nie poprzedza natychmiast try
instrukcji programu obsługi wyjątków. To ograniczenie jest na poziomie MSIL, więc dopuszczalne jest, aby źródło niegenerujące kodu między wywołaniem a elementem try
, takie jak komentarze.
Objawy
Ograniczony region wykonywania (CER), który nigdy nie jest traktowany jako taki, ale jako prosty blok obsługi wyjątków (finally
lub catch
). W związku z tym region nie działa w przypadku braku pamięci lub przerwania wątku.
Przyczyna
Wzorzec przygotowywania cer nie jest prawidłowo przestrzegany. Jest to zdarzenie błędu. Wywołanie PrepareConstrainedRegions metody używane do oznaczania procedur obsługi wyjątków jako wprowadzenia cer w blokach//catch
fault
/finally
filter
musi być używane bezpośrednio przed instrukcją .try
Rozwiązanie
Upewnij się, że wywołanie ma PrepareConstrainedRegions miejsce bezpośrednio przed instrukcją try
.
Wpływ na środowisko uruchomieniowe
Ta usługa MDA nie ma wpływu na CLR.
Wyjście
MdA wyświetla nazwę metody wywołującej PrepareConstrainedRegions metodę, przesunięcie MSIL i komunikat wskazujący, że wywołanie nie poprzedza bezpośrednio początku bloku try.
Konfigurowanie
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion/>
</assistants>
</mdaConfig>
Przykład
W poniższym przykładzie kodu pokazano wzorzec, który powoduje aktywowanie tego rozwiązania MDA.
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}