illegalPrepareConstrainedRegion MDA

메모

이 문서는 .NET Framework와 관련이 있습니다. .NET 6 이상 버전을 포함하여 .NET의 최신 구현에는 적용되지 않습니다.

illegalPrepareConstrainedRegion 메서드 호출이 예외 처리기의 문 바로 앞에 try 있지 않으면 MDA(관리 디버깅 도우미)가 활성화 RuntimeHelpers.PrepareConstrainedRegions 됩니다. 이 제한은 MSIL 수준에 있으므로 주석과 같이 호출과 그 사이에 코드 생성이 아닌 원본이 try있는 것이 허용됩니다.

Symptoms

이러한 것으로 처리되지 않지만 간단한 예외 처리 블록(또는catch)으로 처리되지 않는 제한된 실행 영역(finallyCER)입니다. 결과적으로 메모리 부족 상태 또는 스레드가 중단된 경우 지역이 실행되지 않습니다.

원인

CER에 대한 준비 패턴을 올바르게 따르지 않습니다. 오류 이벤트입니다. 예외 처리기를 해당 블록에finallyfaultfiltercatch///CER을 도입하는 것으로 표시하는 데 사용되는 메서드 호출은 PrepareConstrainedRegions 문 바로 앞에 try 사용해야 합니다.

해결 방법

명령문 바로 앞에 호출 PrepareConstrainedRegionstry 수행되는지 확인합니다.

런타임에 미치는 영향

이 MDA는 CLR에 영향을 주지 않습니다.

출력

MDA는 메서드를 호출하는 PrepareConstrainedRegions 메서드의 이름, MSIL 오프셋 및 호출이 try 블록의 시작 바로 앞에 있지 않음을 나타내는 메시지를 표시합니다.

구성 / 설정

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

Example

다음 코드 예제에서는 이 MDA를 활성화하는 패턴을 보여 줍니다.

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

참고하십시오