Freigeben über


CA2131: Sicherheitskritische Typen dürfen nicht an Typäquivalenz beteiligt sein

TypeName

CriticalTypesMustNotParticipateInTypeEquivalence

CheckId

CA2131

Kategorie

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Ein Typ nimmt an Typäquivalenz teil und entweder der Typ selbst oder ein Member oder ein Feld des Typs wird mit dem SecurityCriticalAttribute-Attribut markiert.

Regelbeschreibung

Diese Regel wird für alle wichtigen Typen ausgelöst oder für Typen, die wichtige Methoden oder Felder enthalten, die an der Typäquivalenz beteiligt sind. Wenn die CLR einen derartigen Typ erkennt, kann sie zur Laufzeit nicht mit einem TypeLoadException-Objekt geladen werden. In der Regel wird diese Regel nur ausgelöst, wenn Benutzer Typäquivalenz manuell implementieren und die Typäquivalenz nicht von tlbimp und den Compilern ausführen lassen.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, entfernen Sie das SecurityCritical-Attribut.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

In den folgenden Beispielen werden eine Schnittstelle, eine Methode und ein Feld, die bewirken, dass diese Regel ausgelöst wird, veranschaulicht.

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

Siehe auch

Konzepte

Sicherheitstransparenter Code, Ebene 2