CA2131: os tipos críticos de segurança podem não participar da equivalência de tipo
TypeName |
CriticalTypesMustNotParticipateInTypeEquivalence |
CheckId |
CA2131 |
Categoria |
Microsoft.Security |
Alteração Significativa |
Quebra |
Causa
Um tipo participa da equivalência do tipo e o próprio tipo, ou um membro ou campo de tipo, é marcado com o atributo de SecurityCriticalAttribute .
Descrição da Regra
Esta regra é acionado em qualquer tipo críticos ou em tipos que contenha os métodos importantes ou os campos que estão participando da equivalência do tipo.Quando CLR detecta essa tipo, não o carrega com TypeLoadException em tempo de execução.Normalmente, esta regra ser disparado apenas quando equivalência do tipo de ferramentas dos usuários manualmente em vez de confiar em 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 de SecurityCritical.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
Os exemplos a seguir demonstram uma interface, um método, e um campo que provocou essa regra seja acionado.
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;
}
}