Partager via


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

TypeName

TransparencyAnnotationsShouldNotConflict

CheckId

CA2136

Catégorie

Microsoft.Security

Modification avec rupture

Oui

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 celle de l'attribut de sécurité d'un conteneur du membre.

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 une méthode marquée avec l'attribut SecuritySafeCriticalAttribute.

Comment corriger les violations

Pour résoudre cette violation, supprimez l'attribut de sécurité de l'élément de code qui a une portée inférieure ou modifiez son attribut pour qu'il corresponde à celui de l'élément de code conteneur.

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