CA2131: Tipos importantes de segurança não podem participar de equivalência de tipo
TypeName |
CriticalTypesMustNotParticipateInTypeEquivalence |
CheckId |
CA2131 |
<strong>Categoria</strong> |
Microsoft.Security |
Alteração significativa |
Quebrando |
Causa
Participa de um tipo de equivalência de tipo e um tanto o próprio tipo ou um membro ou um campo do tipo, é marcado com o SecurityCriticalAttribute atributo.
Descrição da regra
Essa regra é acionado em qualquer críticos tipos ou tipos que contêm métodos críticos ou campos que estão participando da equivalência de tipo. Quando o CLR detecta desse tipo, ele pode falhar para carregá-lo com um TypeLoadException em tempo de execução. Normalmente, essa regra é acionado somente quando os usuários a implementar a equivalência de tipo manualmente em vez de por contar com tlbimp e os compiladores para fazer a equivalência do tipo.
Como corrigir violações
Para corrigir uma violação desta regra, remova o atributo SecurityCritical.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
Os exemplos a seguir demonstram uma interface, um método e um campo que fará com que a regra seja disparada.
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;
}
}