Compartilhar via


CA2131: Tipos críticos de segurança podem não participar da equivalência de tipo

Item Valor
RuleId CA2131
Categoria Microsoft.Security
Alteração da falha Quebra

Causa

Um tipo participa da equivalência do tipo e o próprio tipo, ou um membro ou campo do tipo, é marcado com o atributo SecurityCriticalAttribute.

Observação

Esta regra foi preterida. Para obter mais informações, confira Regras preteridas.

Descrição da regra

Esta regra é acionada em qualquer tipo crítico ou em tipos que contenham métodos críticos ou campos que estejam participando da equivalência do tipo. Ao detectar um tipo assim, o CLR não o carrega com um TypeLoadException em tempo de execução. Normalmente, essa regra só é acionada quando usuários implementam equivalência de tipo manualmente, em vez de depender de tlbimp e dos compiladores para fazer a equivalência do tipo.

Como corrigir violações

Para corrigir uma violação dessa regra, remova o atributo SecurityCritical.

Quando suprimir avisos

Não suprima um aviso nessa regra.

Exemplo

Os exemplos a seguir demonstram uma interface, um método e um campo que fará com que essa regra seja acionada.

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

Confira também

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