Partager via


CA2146 : Les types doivent être au moins aussi critiques que les types de base et les interfaces

TypeName

TypesMustBeAtLeastAsCriticalAsBaseTypes

CheckId

CA2146

Catégorie

Microsoft.Security

Modification avec rupture

Oui

Cause

Un type transparent est dérivé d'un type marqué avec le SecuritySafeCriticalAttribute ou le SecurityCriticalAttribute, ou un type marqué avec l'attribut SecuritySafeCriticalAttribute est dérivé d'un type marqué avec l'attribut SecurityCriticalAttribute.

Description de la règle

Cette règle se déclenche lorsqu'un type dérivé a un attribut de transparence de sécurité qui n'est pas aussi critique que son type de base ou l'interface implémentée.Seuls les types critiques peuvent dériver des types de base critiques ou implémenter des interfaces critiques, et seuls les types critiques ou critiques sécurisés peuvent dériver des types de base critiques sécurisés ou implémenter des interfaces critiques sécurisées.Les violations de cette règle dans la transparence de niveau 2 provoquent une TypeLoadException pour le type dérivé.

Comment corriger les violations

Pour résoudre cette violation, marquez le type dérivé ou d'implémentation avec un attribut de transparence qui est au moins aussi critique que l'interface ou le type de base.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    [SecuritySafeCritical]
    public class SafeCriticalBase
    {
    }

    // CA2156 violation - a transparent type cannot derive from a safe critical type.  The fix is any of:
    //   1. Make SafeCriticalBase transparent
    //   2. Make TransparentFromSafeCritical safe critical
    //   3. Make TransparentFromSafeCritical critical
    public class TransparentFromSafeCritical : SafeCriticalBase
    {
    }

    [SecurityCritical]
    public class CriticalBase
    {
    }

    // CA2156 violation - a transparent type cannot derive from a critical type.  The fix is any of:
    //   1. Make CriticalBase transparent
    //   2. Make TransparentFromCritical critical
    public class TransparentFromCritical : CriticalBase
    {
    }

    // CA2156 violation - a safe critical type cannot derive from a critical type.  The fix is any of:
    //   1. Make CriticalBase transparent
    //   2. Make CriticalBase safe critical
    //   3. Make SafeCriticalFromCritical critical
    [SecuritySafeCritical]
    public class SafeCriticalFromCritical : CriticalBase
    {
    }

}