Partilhar via


CA2136: Os membros não devem ter anotações conflitantes de transparência

TypeName

TransparencyAnnotationsShouldNotConflict

CheckId

CA2136

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Essa regra é acionado quando um membro do tipo é marcado com um System.Security o atributo de segurança que possui uma transparência diferente que o atributo de segurança de um recipiente do membro.

Descrição da regra

Atributos de transparência são aplicados a partir de elementos de código de maior escopo para elementos de escopo menor. Os atributos de transparência dos elementos de código com escopo de maior prevalecem sobre atributos de transparência dos elementos de código que estão contidos no primeiro elemento. Por exemplo, uma classe marcada com o SecurityCriticalAttribute atributo não pode conter um método marcado com o SecuritySafeCriticalAttribute atributo.

Como corrigir violações

Para corrigir essa violação, remova o atributo de segurança do elemento de código que tenha o menor escopo ou alterar seu atributo seja o mesmo elemento de código contém.

Quando suprimir avisos

Não suprimir avisos dessa regra.

Exemplo

No exemplo a seguir, um método está marcado com o SecuritySafeCriticalAttribute atributo e ele é um membro de uma classe marcada com o SecurityCriticalAttribute atributo. O atributo de segurança de segurança deve ser removido.

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