Partilhar via


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

TypeName

TransparencyAnnotationsShouldNotConflict

CheckId

CA2136

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

Esta regra é disparada quando um membro do tipo é marcado com um atributo de segurança de System.Security que tenha uma transparência diferente do atributo de segurança de um contêiner de membro.

Descrição da Regra

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

Como Corrigir Violações

Para corrigir essa violação, remova o atributo de segurança do elemento de código que tem um escopo mais baixo, ou alterar seu atributo para ser o mesmo que o elemento de código contentor.

Quando Suprimir Alertas

Não suprima avisos desta regra.

Exemplo

No exemplo a seguir, é um método marcado com o atributo de SecuritySafeCriticalAttribute e é um membro de uma classe que é marcada com o atributo de SecurityCriticalAttribute .O atributo seguro 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()
        {
        }
    }
}