CA2133: 대리인은 투명도가 일관된 메서드에 바인딩해야 합니다.
TypeName |
DelegatesMustBindWithConsistentTransparency |
CheckId |
CA2133 |
범주 |
Microsoft.Security |
변경 수준 |
주요 변경 |
[!참고]
이 경고는 CoreCLR(Silverlight 웹 응용 프로그램에 특정한 CLR 버전)을 실행하는 코드에만 적용됩니다.
원인
이 경고는 SecurityCriticalAttribute로 표시된 대리자를 투명하거나 SecuritySafeCriticalAttribute로 표시된 메서드에 바인딩하는 메서드에서 실행됩니다.또한 투명하거나 안전에 중요한 대리자를 중요한 메서드에 바인딩하는 메서드에서도 이 경고가 발생합니다.
규칙 설명
대리자 형식과 바인딩할 메서드는 일관된 투명도를 가져야 합니다.투명 및 안전한 중요한 대리자만 다른 투명 또는 안전에 중요한 메서드를 바인딩할 수 있습니다.마찬가지로 중요한 대리자는 중요한 메서드에만 바인딩할 수 있습니다.이러한 바인딩 규칙은 대리자를 통해 메서드를 호출할 수 있는 코드만 같은 메서드를 직접 호출할 수 있는지 확인합니다.예를 들어, 바인딩 규칙은 투명 코드가 투명한 대리자를 통해 직접 중요한 코드를 호출하는 것을 방지합니다.
위반 문제를 해결하는 방법
이 경고 위반 문제를 해결하려면 둘의 투명도가 동등해지도록 대리자 또는 메서드의 투명도를 변경하십시오.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
코드
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public delegate void TransparentDelegate();
[SecurityCritical]
public delegate void CriticalDelegate();
public class TransparentType
{
void DelegateBinder()
{
// CA2133 violation - binding a transparent delegate to a critical method
TransparentDelegate td = new TransparentDelegate(CriticalTarget);
// CA2133 violation - binding a critical delegate to a transparent method
CriticalDelegate cd = new CriticalDelegate(TransparentTarget);
}
[SecurityCritical]
void CriticalTarget() { }
void TransparentTarget() { }
}
}