CA2136: I membri non devono avere annotazioni di trasparenza in conflitto
TypeName |
TransparencyAnnotationsShouldNotConflict |
CheckId |
CA2136 |
Category |
Microsoft.Security |
Breaking Change |
Breaking |
Causa
Questa regola funziona quando un membro del tipo è contrassegnato da un attributo di sicurezza System.Security che dispone di una trasparenza diversa dall'attributo di sicurezza di un contenitore del membro.
Descrizione della regola
Gli attributi di trasparenza vengono applicati da elementi di codice con un ambito più ampio a elementi con ambito più ridotto.Gli attributi di trasparenza di elementi di codice che presentano un ambito più ampio hanno la precedenza su quelli contenuti nel primo elemento.Ad esempio, una classe contrassegnata con l'attributo SecurityCriticalAttribute non può contenere un metodo contrassegnato con l'attributo SecuritySafeCriticalAttribute.
Come correggere le violazioni
Per correggere questa violazione, rimuovere l'attributo di sicurezza dall'elemento di codice che ha uno scopo minore o modificarne l'attributo in modo che sia uguale all'elemento di codice che lo contiene.
Esclusione di avvisi
Non escludere gli avvisi da questa regola.
Esempio
Nel seguente esempio, un metodo è contrassegnato con l'attributo SecuritySafeCriticalAttribute ed è un membro di una classe contrassegnata con l'attributo SecurityCriticalAttribute.L'attributo SafeSecure deve essere rimosso.
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()
{
}
}
}