CA2136 : Les membres ne doivent pas avoir d'annotations de transparence conflictuellesCA2136: Members should not have conflicting transparency annotations

TypeNameTypeName TransparencyAnnotationsShouldNotConflictTransparencyAnnotationsShouldNotConflict
CheckIdCheckId CA2136CA2136
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Cette règle se déclenche lorsqu’un membre de type est marqué avec un System.Security l’attribut de sécurité qui a une transparence différente de celle de l’attribut de sécurité d’un conteneur du membre.This rule fires when a type member is marked with a System.Security security attribute that has a different transparency than the security attribute of a container of the member.

Description de la règleRule Description

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.Transparency attributes are applied from code elements of larger scope to elements of smaller scope. 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.The transparency attributes of code elements with larger scope take precedence over transparency attributes of code elements that are contained in the first element. Par exemple, une classe qui est marquée avec la SecurityCriticalAttribute attribut ne peut pas contenir une méthode qui est marquée avec le SecuritySafeCriticalAttribute attribut.For example, a class that is marked with the SecurityCriticalAttribute attribute cannot contain a method that is marked with the SecuritySafeCriticalAttribute attribute.

Comment corriger les violationsHow to Fix 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 être le même que l’élément de code contenant.To fix this violation, remove the security attribute from the code element that has lower scope, or change its attribute to be the same as the containing code element.

Quand supprimer les avertissementsWhen to Suppress Warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress warnings from this rule.

ExempleExample

Dans l’exemple suivant, une méthode est marquée avec la SecuritySafeCriticalAttribute attribut et il est membre d’une classe qui est marqué avec la SecurityCriticalAttribute attribut.In the following example, a method is marked with the SecuritySafeCriticalAttribute attribute and it is a member of a class that is marked with the SecurityCriticalAttribute attribute. L’attribut critique sécurisé doit être supprimé.The security safe attribute should be removed.

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