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 de elementos do código de maior escopo para elementos de escopo menor.Os atributos de transparência dos elementos de código com maior escopo têm precedência 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 do código que tenha o menor escopo ou alterar seu atributo para ser o mesmo que o elemento que contém código.
Quando suprimir avisos
Não suprimir avisos da 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()
{
}
}
}