Partilhar via


illegalPrepareConstrainedRegion MDA

The illegalPrepareConstrainedRegion gerenciado Assistente de depuração (MDA) é ativado quando um RuntimeHelpers.PrepareConstrainedRegions telefonar de método não deve preceder imediatamente o try demonstrativo do manipulador de exceção. Essa restrição é no nível da MSIL, portanto, é permitido ter não geradores de código fonte entre a telefonar e o try, sistema autônomo comentários.

Sintomas

Uma região de execução restrita (CER) nunca é tratada sistema autônomo tal, mas sistema autônomo uma exceção simples manipulação de bloco (finally ou catch). sistema autônomo conseqüência, a região não é executado no evento de uma condição de fora da memória ou uma anulação de thread.

Causa

O padrão de preparação de uma CER não é seguido corretamente.Esse é um evento de erro.The PrepareConstrainedRegions telefonar do método usada para marcar sistema autônomo manipuladores de exceção sistema autônomo introduzir uma CER em seus catch/finally/fault/filter blocos devem ser usados imediatamente antes de try demonstrativo.

Resolução

Certifique-se de que a telefonar para PrepareConstrainedRegions ocorre imediatamente antes de trydemonstrativo.

Efeito sobre o tempo de execução

Este MDA não tem efeito sobre o CLR.

Saída

O MDA exibe o nome do método chamando o PrepareConstrainedRegions método, o deslocamento MSIL e uma mensagem indicando que a telefonar não preceder imediatamente o início do bloco try.

Configuração

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

Exemplo

O exemplo de código a seguir demonstra o padrão que faz com que este MDA ser ativado.

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

Consulte também

Conceitos

Diagnosticar erros com assistentes de depuração gerenciadas

Visão geral do empacotamento interop

Referência

MarshalAsAttribute

PrepareConstrainedRegions