CA2132: Los constructores predeterminados deben ser al menos tan críticos para la seguridad como los constructores predeterminados de tipo base

Elemento Valor
RuleId CA2132
Category Microsoft.Security
Cambio importante Problemático

Nota

Esta advertencia solo se aplica al código que ejecuta CoreCLR (la versión de CLR específica de las aplicaciones web de Silverlight).

Causa

El atributo de transparencia del constructor predeterminado de una clase derivada no es tan crítico como la transparencia de la clase base.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

El código de la aplicación Silverlight no puede usar los tipos y miembros con SecurityCriticalAttribute. El código de confianza puede utilizar solo tipos y miembros críticos para la seguridad en .NET Framework para la biblioteca de clases de Silverlight. Dado que una construcción pública o protegida en una clase derivada debe tener la misma transparencia, o mayor, que su clase base, una clase de una aplicación no puede derivar de una clase marcada como SecurityCritical.

En el caso del código de la plataforma CoreCLR, si un tipo base tiene un constructor predeterminado público o protegido no transparente, el tipo derivado debe obedecer las reglas de herencia de constructor predeterminadas. El tipo derivado también debe tener un constructor por defecto y ese constructor debe ser al menos tan crítico como el constructor predeterminado del tipo base.

Cómo corregir infracciones

Para corregir la infracción, quite el tipo o no derive del tipo de seguridad no transparente.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla. Las infracciones de esta regla por código de aplicación darán lugar a que CoreCLR rechace cargar el tipo con un objeto TypeLoadException.

Código

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