CA2131 : Les types critiques de sécurité ne peuvent pas participer à l'équivalence des typesCA2131: Security critical types may not participate in type equivalence

TypeNameTypeName CriticalTypesMustNotParticipateInTypeEquivalenceCriticalTypesMustNotParticipateInTypeEquivalence
CheckIdCheckId CA2131CA2131
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Un type participe à l’équivalence de type et un type lui-même, ou un membre ou champ du type, est marqué avec la SecurityCriticalAttribute attribut.A type participates in type equivalence and a either the type itself, or a member or field of the type, is marked with the SecurityCriticalAttribute attribute.

Description de la règleRule Description

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.This rule fires on any critical types or types that contain critical methods or fields that are participating in type equivalence. Lorsque le CLR détecte un tel type, il ne parvient pas à le charger avec une TypeLoadException en cours d’exécution.When the CLR detects such a type, it fails to load it with a TypeLoadException at run time. 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.Typically, this rule fires only when users implement type equivalence manually rather than by relying on tlbimp and the compilers to do the type equivalence.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, supprimez l’attribut SecurityCritical.To fix a violation of this rule, remove the SecurityCritical attribute.

Quand supprimer les avertissementsWhen to Suppress Warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

Les exemples suivants montrent une interface, une méthode et un champ qui fait que cette règle s’applique.The following examples demonstrate an interface, a method, and a field that will cause this rule to fire.

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 aussiSee Also

Code Transparent de sécurité, niveau 2Security-Transparent Code, Level 2