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;
}
}