다음을 통해 공유


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