illegalPrepareConstrainedRegion MDA
Примечание.
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Помощник по отладке управляемого кода (MDA) illegalPrepareConstrainedRegion
запускается, если сразу же после вызова метода RuntimeHelpers.PrepareConstrainedRegions не следует инструкция try
обработчика исключений. Это ограничение используется на уровне MSIL, поэтому между вызовом и try
можно размещать текст, не приводящий к созданию кода, например комментарии.
Симптомы
Область ограниченного выполнения, которая никогда не рассматривается в виде такой области, но представляет собой простой блок обработки исключений (finally
или catch
). Поэтому эта область не запускается в случае нехватки памяти или прерывания потока.
Причина
Вы не следуете шаблону подготовки для области ограниченного выполнения. Это ошибка. Вызов PrepareConstrainedRegions метода, используемый для пометки обработчиков исключений, как введение CER в их//catch
fault
/finally
filter
блоках, должен использоваться непосредственно перед инструкцией.try
Разрешение
Убедитесь, что вызов метода PrepareConstrainedRegions выполняется непосредственно перед инструкцией try
.
Влияние на среду выполнения
Этот помощник отладки управляемого кода не оказывает никакого влияния на среду CLR.
Выходные данные
Помощник по отладке управляемого кода отображает имя метода, вызывающего метод PrepareConstrainedRegions, смещение MSIL и сообщение о том, что вызов метода выполняется не перед началом блока try.
Настройка
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion/>
</assistants>
</mdaConfig>
Пример
В следующем примере кода показан шаблон, который запускает этот помощник по отладке управляемого кода.
void MethodWithInvalidPCR()
{
RuntimeHelpers.PrepareConstrainedRegions();
Object o = new Object();
try
{
…
}
finally
{
…
}
}