CA2136 : Les membres ne doivent pas avoir d'annotations de transparence conflictuelles

Élément Valeur
ID de la règle CA2136
Category Microsoft.Security
Modification avec rupture Rupture

Cause

Cette règle se déclenche lorsqu’un membre de type est marqué avec un attribut de sécurité System.Security, qui a une transparence différente de l’attribut de sécurité d’un conteneur du membre.

Notes

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

Description de la règle

Les attributs de transparence sont appliqués à partir d’éléments de code de plus grande portée à des éléments de plus petite portée. Les attributs de transparence d’éléments de code avec une plus grande portée sont prioritaires sur les attributs de transparence des éléments de code contenus dans le premier élément. Par exemple, une classe marquée avec l’attribut SecurityCriticalAttribute ne peut pas contenir de méthode marquée avec l’attribut SecuritySafeCriticalAttribute.

Comment corriger les violations

Pour corriger cette violation, supprimez l’attribut de sécurité de l’élément de code dont l’étendue est inférieure ou modifiez son attribut pour qu’il soit identique à l’élément de code contenant.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

Dans l’exemple suivant, une méthode est marquée avec l’attribut SecuritySafeCriticalAttribute et c’est un membre d’une classe marquée avec l’attribut SecurityCriticalAttribute. L’attribut de sécurité sécurisé doit être supprimé.

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    [SecurityCritical]
    public class CriticalClass
    {
        // CA2136 violation - this method is not really safe critical, since the larger scoped type annotation
        // has precidence over the smaller scoped method annotation.  This can be fixed by removing the
        // SecuritySafeCritical attribute on this method
        [SecuritySafeCritical]
        public void SafeCriticalMethod()
        {
        }
    }
}