CA2136: Los miembros no deben tener anotaciones de transparencia en conflictoCA2136: Members should not have conflicting transparency annotations

TypeNameTypeName TransparencyAnnotationsShouldNotConflictTransparencyAnnotationsShouldNotConflict
Identificador de comprobaciónCheckId CA2136CA2136
CategoríaCategory Microsoft.SecurityMicrosoft.Security
Cambio problemáticoBreaking Change ProblemáticoBreaking

MotivoCause

Esta regla se desencadena cuando un miembro de tipo se marca con un System.Security atributo de seguridad que tiene una transparencia diferente que el atributo de seguridad de un contenedor del miembro.This rule fires when a type member is marked with a System.Security security attribute that has a different transparency than the security attribute of a container of the member.

Descripción de la reglaRule description

Los atributos de transparencia se aplican de los elementos de código de ámbito mayor a los elementos de ámbito menor.Transparency attributes are applied from code elements of larger scope to elements of smaller scope. 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.The transparency attributes of code elements with larger scope take precedence over transparency attributes of code elements that are contained in the first element. Por ejemplo, una clase marcada con el SecurityCriticalAttribute atributo no puede contener un método marcado con el SecuritySafeCriticalAttribute atributo.For example, a class that is marked with the SecurityCriticalAttribute attribute cannot contain a method that is marked with the SecuritySafeCriticalAttribute attribute.

Cómo corregir infraccionesHow to fix violations

Para corregir esta infracción, quite el atributo de seguridad desde el 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.To fix this violation, remove the security attribute from the code element that has lower scope, or change its attribute to be the same as the containing code element.

Cuándo Suprimir advertenciasWhen to suppress warnings

No suprima las advertencias de esta regla.Do not suppress warnings from this rule.

EjemploExample

En el ejemplo siguiente, un método está marcado con el SecuritySafeCriticalAttribute atributo y es un miembro de una clase marcada con el SecurityCriticalAttribute atributo.In the following example, a method is marked with the SecuritySafeCriticalAttribute attribute and it is a member of a class that is marked with the SecurityCriticalAttribute attribute. El atributo de prueba de errores de seguridad se debe quitar.The security safe attribute should be removed.

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