Compartilhar via


CA2131: Tipos de segurança críticos podem não participar 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 falhará para carregá-lo com um TypeLoadException em tempo de execução.Normalmente, essa regra é acionado somente quando os usuários a implementar tipo equivalência manualmente em vez de por contar com tlbimp e os compiladores para fazer a equivalência de 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;
    }
}

Consulte também

Conceitos

Código de segurança transparente, nível 2