Condividi tramite


CA2146: I tipi devono essere Critical almeno come le interfacce e i tipi base relativi

Articolo Valore
ID regola CA2146
Category Microsoft.Security
Modifica Interruzione

Causa

Un tipo trasparente è derivato da un tipo contrassegnato con SecuritySafeCriticalAttribute o oppure SecurityCriticalAttributeda un tipo contrassegnato con l'attributo SecuritySafeCriticalAttribute deriva da un tipo contrassegnato con l'attributo SecurityCriticalAttribute .

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione regola

Questa regola viene attivata quando un tipo derivato dispone di un attributo di trasparenza di sicurezza che non è critico come il tipo di base o l'interfaccia implementata. Solo i tipi critici possono derivare da tipi di base critici o implementare interfacce critiche e solo tipi critici o critici per la sicurezza possono derivare da tipi di base critici per la sicurezza o implementare interfacce critiche per la sicurezza. Le violazioni di questa regola nella trasparenza di livello 2 comportano un oggetto TypeLoadException per il tipo derivato.

Come correggere le violazioni

Per correggere questa violazione, contrassegnare il tipo derivato o implementato con un attributo di trasparenza che è almeno critico come il tipo o l'interfaccia di base.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

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

}