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