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