CA2136: Los miembros no deben tener anotaciones de transparencia en conflicto
Nombre de tipo |
TransparencyAnnotationsShouldNotConflict |
Identificador de comprobación |
CA2136 |
Categoría |
Microsoft.Security |
Cambio problemático |
Sí |
Motivo
Esta regla se desencadena cuando un miembro de tipo se marca con un atributo de seguridad System.Security que tiene una transparencia diferente que el atributo de seguridad de un contenedor del miembro.
Descripción de la regla
Los atributos de transparencia se aplican de los elementos de código de ámbito mayor a los elementos de ámbito menor.Los atributos de transparencia de los elementos de código con mayor ámbito tienen prioridad sobre los atributos de transparencia de los elementos de código incluidos en el primer elemento.Por ejemplo, una clase marcada con el atributo SecurityCriticalAttribute no puede contener un método marcado con el atributo SecuritySafeCriticalAttribute.
Cómo corregir infracciones
Para corregir esta infracción, quite el atributo de seguridad del elemento de código que tiene el ámbito más bajo o cambie su atributo para que sea igual que el elemento de código que contiene.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.
Ejemplo
En el ejemplo siguiente, se marca un método con el atributo SecuritySafeCriticalAttribute y es un miembro de una clase marcada con el atributo SecurityCriticalAttribute.Se debería quitar el atributo crítico para la seguridad.
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()
{
}
}
}