Share via


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

Elemento Valor
RuleId CA2136
Category Microsoft.Security
Cambio importante Problemático

Causa

Esta regla se activa cuando un miembro de tipo está marcado con un atributo de seguridad System.Security que tiene una transparencia diferente al atributo de seguridad de un contenedor del miembro.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

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 un ámbito inferior o cambie su atributo para que sea el mismo que el elemento de código que lo contiene.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente, un método se marca con el atributo SecuritySafeCriticalAttribute y es miembro de una clase marcada con el atributo SecurityCriticalAttribute. Se debe quitar el atributo de 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()
        {
        }
    }
}