Share via


CA2136: I membri non devono avere annotazioni di trasparenza in conflitto

Articolo Valore
ID regola CA2136
Category Microsoft.Security
Modifica Interruzione

Causa

Questa regola viene attivata quando un membro del tipo è contrassegnato con un System.Security attributo di sicurezza con trasparenza diversa rispetto all'attributo di sicurezza di un contenitore del membro.

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione 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 con ambito inferiore o modificarne l'attributo in modo che corrisponda all'elemento di codice contenitore.

Quando eliminare gli avvisi

Non eliminare gli avvisi da questa regola.

Esempio

Nell'esempio seguente un metodo viene contrassegnato con l'attributo SecuritySafeCriticalAttribute ed è un membro di una classe contrassegnata con l'attributo SecurityCriticalAttribute . L'attributo security safe 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()
        {
        }
    }
}