CA2137: 투명한 메서드는 안정형 IL만 포함해야 합니다.

항목
RuleId CA2137
범주 Microsoft.Security
주요 변경 내용 주요 변경

원인

메서드가 확인할 수 없는 코드를 포함하거나 형식을 참조로 반환합니다.

참고 항목

이 규칙은 더 이상 사용되지 않습니다. 자세한 내용은 사용되지 않는 규칙을 참조하세요.

규칙 설명

이 규칙은 보안 투명 코드에서 확인할 수 없는 MSIL(Microsoft Intermediate Language)을 실행하려고 할 때 적용됩니다. 그러나 이 규칙은 완전한 IL 검증 도구를 포함하지 않으며 대신 추론을 사용하여 MSIL 확인 시 대부분의 위반을 catch합니다.

코드에 확인 가능한 MSIL만 포함되었는지 확인하려면 어셈블리에서 Peverify.exe(PEVerify 도구)를 실행합니다. 오류가 발생하는, 확인이 불가능한 투명 메서드만 출력하도록 제한하는 /transparent 옵션을 사용하여 PEVerify를 실행합니다. /transparent 옵션을 사용하지 않으면 PEVerify는 확인이 불가능한 코드가 포함될 수 있는 중요한 메서드도 확인합니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 메서드를 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 표시하거나 확인이 불가능한 코드를 제거합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

예시

이 예제의 메서드는 확인이 불가능한 코드를 사용하며 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 표시되어야 합니다.

using System;
using System.Security;


namespace TransparencyWarningsDemo
{

    public class UnverifiableMethodClass
    {
        // CA2137 violation - transparent method with unverifiable code.  This method should become critical or
        // safe critical 
    //    public unsafe byte[] UnverifiableMethod(int length)
    //    {
    //        byte[] bytes = new byte[length];
    //        fixed (byte* pb = bytes)
    //        {
    //            *pb = (byte)length;
    //        }

    //        return bytes;
    //    }
    }

}