Compartir a través de


CA2131: Los tipos críticos para la seguridad no pueden participar en la equivalencia de tipos

TypeName

CriticalTypesMustNotParticipateInTypeEquivalence

Identificador de comprobación

CA2131

Categoría

Microsoft.Security

Cambio problemático

Problemático

Motivo

Un tipo participa en la equivalencia de tipos y, el propio tipo, o un miembro o campo del tipo, está marcado con el atributo SecurityCriticalAttribute.

Descripción de la regla

Esta regla se produce en todos los tipos críticos o en los tipos que contienen métodos o campos críticos que participan en la equivalencia de tipos.Cuando CLR detecta esta clase de tipo, no lo carga con una TypeLoadException en tiempo de ejecución.Normalmente, esta regla solo se desencadena cuando los usuarios implementan la equivalencia de tipos manualmente en lugar de confiar en tlbimp y los compiladores para hacer la equivalencia de tipos.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite el atributo SecurityCritical.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

En los ejemplos siguientes se muestra una interfaz, un método y un campo que harán que se desencadene esta regla.

using System;
using System.Security;
using System.Runtime.InteropServices;

[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: AllowPartiallyTrustedCallers]

namespace TransparencyWarningsDemo
{

    // CA2131 error - critical type participating in equivilance
    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public interface ICriticalEquivilentInterface
    {
        void Method1();
    }

    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ITransparentEquivilentInterface")]
    public interface ITransparentEquivilentInterface
    {
        // CA2131 error - critical method in a type participating in equivilance
        [SecurityCritical]
        void CriticalMethod();
    }

    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public struct EquivilentStruct
    {
        // CA2131 error - critical field in a type participating in equivalence
        [SecurityCritical]
        public int CriticalField;
    }
}

Vea también

Conceptos

Código transparente en seguridad, nivel 2