다음을 통해 공유


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

TypeName

TransparentMethodsMustBeVerifiable

CheckId

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;
    //    }
    }

}