Partager via


CA2131 : Les types critiques de sécurité ne peuvent pas participer à l'équivalence des types

TypeName

CriticalTypesMustNotParticipateInTypeEquivalence

CheckId

CA2131

Catégorie

Microsoft.Security

Modification avec rupture

Oui

Cause

Un type participe à l'équivalence des types et un type lui-même, ou un membre ou champ du type, est marqué avec l'attribut SecurityCriticalAttribute.

Description de la règle

Cette règle se déclenche sur tout type ou type critique contenant des méthodes critiques ou des champs qui participent à l'équivalence de type. Lorsque le CLR détecte un tel type, il ne peut pas le charger avec une TypeLoadException au moment de l'exécution. En général, cette règle se déclenche uniquement lorsque les utilisateurs implémentent l'équivalence de type manuellement plutôt qu'en comptant sur tlbimp et les compilateurs pour faire l'équivalence de type.

Comment corriger les violations

Pour résoudre une violation de cette règle, supprimez l'attribut SecurityCritical.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

Les exemples suivants présentent une interface, une méthode et un champ qui provoqueront le déclenchement de cette règle.

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

Voir aussi

Concepts

Code transparent de sécurité, niveau 2