CA2132: Standardkonstruktoren müssen mindestens so kritisch sein wie die Standardkonstruktoren des Basistyps

TypeName

DefaultConstructorsMustHaveConsistentTransparency

CheckId

CA2132

Kategorie

Microsoft.Security

Unterbrechende Änderung

Breaking

HinweisHinweis

Diese Warnung wird nur für Code übernommen, in dem die CoreCLR ausgeführt wird (die Version der CLR, die speziell für Silverlight-Webanwendungen verwendet wird).

Ursache

Das Transparenzattribut des Standardkonstruktors einer abgeleiteten Klasse ist nicht so wichtig wie die Transparenz der Basisklasse.

Regelbeschreibung

Typen und Member, die über das SecurityCriticalAttribute verfügen, 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.

Bei CoreCLR-Plattformcode muss der abgeleitete Typ den Standardkonstruktorvererbungsregeln gehorchen, wenn ein Basistyp über einen öffentlichen oder geschützten nicht transparenten Standardkonstruktor verfügt.Der abgeleitete Typ muss auch über einen Standardkonstruktor verfügen, und dieser Konstruktor muss mindestens wichtiger Standardkonstruktor des Basistyps sein.

Behandeln von Verstößen

Um die Verletzung zu korrigieren, entfernen Sie den Typ, oder nehmen Sie keine Ableitung vom nicht sicherheitstransparenten Typen vor.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.Verstöße gegen diese Regel durch Anwendungscode führen dazu, dass CoreCLR das Laden des Typs mit einem TypeLoadException-Objekt verweigert.

Dd983956.collapse_all(de-de,VS.110).gifCode

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() { }
    }
}