Partager via


CA2133 : Les délégués doivent lier les méthodes avec une transparence cohérente

TypeName

DelegatesMustBindWithConsistentTransparency

CheckId

CA2133

Catégorie

Microsoft.Security

Modification avec rupture

Oui

[!REMARQUE]

Cet avertissement est appliqué uniquement au code exécutant CoreCLR (version du CLR qui est spécifique aux applications Web Silverlight).

Cause

Cet avertissement déclenche sur une méthode qui lie un délégué marqué avec l'SecurityCriticalAttribute à une méthode qui est transparente ou marquée avec l'SecuritySafeCriticalAttribute.L'avertissement déclenche également une méthode qui lie un délégué transparent ou critique sécurisé à une méthode critique.

Description de la règle

Les types délégués et les méthodes qu'ils lient doivent avoir une transparence cohérente.Les délégués transparents et sécurisés (safe-critical) peuvent être liés uniquement à d'autres méthodes transparentes et sécurisées (safe-critical).De même, les délégués critiques peuvent être liés uniquement à des méthodes critiques.Ces règles de liaison vérifient que le seul code qui peut appeler une méthode via un délégué aurait également pu appeler directement la même méthode.Par exemple, la liaison de règles empêche le code transparent d'appeler directement le code critique via un délégué transparent.

Comment corriger les violations

Pour résoudre une violation de cet avertissement, modifiez la transparence du délégué ou de la méthode qu'il lie afin que la transparence des deux soit équivalente.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Dd997710.collapse_all(fr-fr,VS.110).gifCode

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