CA2132 : Les constructeurs par défaut doivent être au moins aussi critiques que les constructeurs par défaut de type de baseCA2132: Default constructors must be at least as critical as base type default constructors

TypeNameTypeName DefaultConstructorsMustHaveConsistentTransparencyDefaultConstructorsMustHaveConsistentTransparency
CheckIdCheckId CA2132CA2132
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change RuptureBreaking

Note

Cet avertissement est appliqué uniquement au code qui est en cours d’exécution (la version du CLR qui est spécifique aux applications Silverlight Web) CoreCLR.This warning is only applied to code that is running the CoreCLR (the version of the CLR that is specific to Silverlight Web applications).

CauseCause

L’attribut de transparence du constructeur par défaut d’une classe dérivée n’est pas aussi critique que la transparence de la classe de base.The transparency attribute of the default constructor of a derived class is not as critical as the transparency of the base class.

Description de la règleRule Description

Types et membres qui ont le SecurityCriticalAttribute ne peut pas être utilisé par le code d’application Silverlight.Types and members that have the SecurityCriticalAttribute cannot be used by Silverlight application code. Les types et membres critiques de sécurité (security-critical) peuvent être uniquement utilisés par le code de confiance dans la bibliothèque de classes .NET Framework pour Silverlight.Security-critical types and members can be used only by trusted code in the .NET Framework for Silverlight class library. Dans la mesure où une construction publique ou protégée dans une classe dérivée doit avoir la même transparence ou une transparence supérieure à sa classe de base, une classe dans une application ne peut pas être dérivée d’une classe marquée SecurityCritical.Because a public or protected construction in a derived class must have the same or greater transparency than its base class, a class in an application cannot be derived from a class marked SecurityCritical.

Pour le code de plateforme CoreCLR, si un type de base a un constructeur public ou protégé non transparent par défaut puis le type dérivé doit respecter les règles d’héritage du constructeur par défaut.For CoreCLR platform code, if a base type has a public or protected non-transparent default constructor then the derived type must obey the default constructor inheritance rules. Le type dérivé doit avoir également un constructeur par défaut, et ce constructeur doit être au moins au constructeur par défaut critique du type de base.The derived type must also have a default constructor and that constructor must be at least as critical default constructor of the base type.

Comment corriger les violationsHow to Fix Violations

Pour corriger la violation, supprimez le type ou ne dérivent pas de type non transparent de sécurité.To fix the violation, remove the type or do not derive from security non-transparent type.

Quand supprimer les avertissementsWhen to Suppress Warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress warnings from this rule. Les violations de cette règle par le code d’application provoquent le refus de CoreCLR de charger le type avec un TypeLoadException.Violations of this rule by application code will result in the CoreCLR refusing to load the type with a TypeLoadException.

CodeCode

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

CommentairesComments