Condividi tramite


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