CA2132: Standardkonstruktoren müssen mindestens so kritisch sein wie die Standardkonstruktoren des Basistyps.
Element | Wert |
---|---|
RuleId | CA2132 |
Category | Microsoft.Security |
Unterbrechende Änderung | Breaking |
Hinweis
Diese Warnung wird nur auf Code angewendet, der CoreCLR ausführt (die für Silverlight-Webanwendungen spezifische CLR-Version).
Ursache
Das Transparenzattribut des Standardkonstruktors einer abgeleiteten Klasse ist weniger kritisch als die Transparenz der Basisklasse.
Hinweis
Diese Regel wurde als veraltet markiert. Weitere Informationen finden Sie unter Veraltete Regeln.
Regelbeschreibung
Typen und Member mit SecurityCriticalAttribute können nicht vom Silverlight-Anwendungscode verwendet werden. Sicherheitsrelevante Typen und Member können nur von vertrauenswürdigem Code in der .NET Framework for Silverlight-Klassenbibliothek verwendet werden. Da eine öffentliche oder geschützte Konstruktion in einer abgeleiteten Klasse mindestens die gleiche Transparenz aufweisen muss wie die zugehörige Basisklasse, können Klassen in einer Anwendung nicht von Klassen abgeleitet werden, die als SecurityCritical markiert sind.
Weist ein Basistyp bei CoreCLR-Plattformcode einen öffentlichen oder geschützten, nicht transparenten Standardkonstruktor auf, muss der abgeleitete Typ die Vererbungsregeln des Standardkonstruktors einhalten. Der abgeleitete Typ muss ebenfalls über einen Standardkonstruktor verfügen, der mindestens genauso kritisch wie der Standardkonstruktor des Basistyps ist.
Behandeln von Verstößen
Entfernen Sie den Typ, oder leiten Sie nicht vom nicht sicherheitstransparenten Typ ab, um den Verstoß zu beheben.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnungen von dieser Regel. Verstöße gegen diese Regel durch Anwendungscode führen dazu, dass CoreCLR das Laden des Typs mit einer TypeLoadException-Ausnahme ablehnt.
Code
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public class BaseWithSafeCriticalDefaultCtor
{
[SecuritySafeCritical]
public BaseWithSafeCriticalDefaultCtor() { }
}
public class DerivedWithNoDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a public or protected non-transparent default .ctor, the
// derived type must also have a default .ctor
}
public class DerivedWithTransparentDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a safe critical default .ctor, the derived type must have
// either a safe critical or critical default .ctor. This is fixed by making this .ctor safe critical
// (however, user code cannot be safe critical, so this fix is platform code only).
DerivedWithTransparentDefaultCtor() { }
}
public class BaseWithCriticalCtor
{
[SecurityCritical]
public BaseWithCriticalCtor() { }
}
public class DerivedWithSafeCriticalDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a critical default .ctor, the derived must also have a critical
// default .ctor. This is fixed by making this .ctor critical, which is not available to user code
[SecuritySafeCritical]
public DerivedWithSafeCriticalDefaultCtor() { }
}
}
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für