共用方式為


CA2133:委派必須繫結至透明度一致的方法

型別名稱

DelegatesMustBindWithConsistentTransparency

CheckId

CA2133

分類

Microsoft.Security

中斷變更

中斷

注意事項注意事項

這個警告只會套用至執行 CoreCLR (專屬於 Silverlight Web 應用程式的 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() { }
    }
}