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()
{
}
}
}