CA2146: I tipi devono essere Critical almeno come le interfacce e i tipi base relativi
TypeName |
TypesMustBeAtLeastAsCriticalAsBaseTypes |
CheckId |
CA2146 |
Category |
Microsoft.Security |
Breaking Change |
Breaking |
Causa
Il tipo Trasparent derivato da un tipo contrassegnato da SecuritySafeCriticalAttribute o da SecurityCriticalAttribute oppure un tipo che è contrassegnato dall'attributo SecuritySafeCriticalAttribute è derivato da un tipo contrassegnato con l'attributo SecurityCriticalAttribute.
Descrizione della 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.Violazioni di questa regola della trasparenza di livello 2 risultino in un TypeLoadException per il tipo derivato.
Come correggere le violazioni
Per correggere questa violazione, contrassegnare il tipo derivato o di implementazione con un attributo di trasparenza che è almeno critico quanto il tipo di base o l'interfaccia.
Esclusione di 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
{
}
}