Compartir a través de


CA2136: Los miembros no deben tener anotaciones de transparencia en conflicto

TypeName

TransparencyAnnotationsShouldNotConflict

Identificador de comprobación

CA2136

Categoría

Microsoft.Security

Cambio problemático

Problemático

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