CA2133: 대리인은 투명도가 일관된 메서드에 바인딩해야 합니다.

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