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