다음을 통해 공유


CA2136: 멤버는 충돌하는 투명도 주석을 가져서는 안 됩니다.

TypeName

TransparencyAnnotationsShouldNotConflict

CheckId

CA2136

범주

Microsoft.Security

변경 수준

주요 변경

원인

이 규칙은 형식 멤버가 멤버 컨테이너의 보안 특성과는 다른 투명도를 가진 System.Security 보안 특성으로 표시될 때 실행됩니다.

규칙 설명

투명성 특성은 큰 범위의 코드 요소에서 작은 범위의 요소에 적용됩니다. 범위가 큰 코드 요소의 투명성 특성은 첫 번째 요소에 포함된 코드 요소의 투명성 특성보다 우선합니다. 예를 들어, SecurityCriticalAttribute 특성으로 표시된 클래스는 SecuritySafeCriticalAttribute 특성으로 표시된 메서드는 포함할 수 없습니다.

위반 문제를 해결하는 방법

이 위반 문제를 해결하려면 범위가 낮은 코드 요소에서 보안 특성을 제거하거나 포함하고 있는 코드 요소와 동일하게 특성을 변경하십시오.

경고를 표시하지 않는 경우

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

예제

다음 예제에서는 메서드는 SecuritySafeCriticalAttribute 특성으로 표시되며 SecurityCriticalAttribute 특성으로 표시되는 클래스의 멤버입니다. 보안 안전 특성을 제거해야 합니다.

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    [SecurityCritical]
    public class CriticalClass
    {
        // CA2136 violation - this method is not really safe critical, since the larger scoped type annotation
        // has precidence over the smaller scoped method annotation.  This can be fixed by removing the
        // SecuritySafeCritical attribute on this method
        [SecuritySafeCritical]
        public void SafeCriticalMethod()
        {
        }
    }
}