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