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
{
}
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per