CA2132: I costruttori predefiniti devono essere Critical almeno come i costruttori predefiniti del tipo base
Articolo | Valore |
---|---|
ID regola | CA2132 |
Category | Microsoft.Security |
Modifica | Interruzione |
Nota
Questo avviso viene applicato solo al codice che esegue CoreCLR (la versione di CLR specifica per le applicazioni Web Silverlight).
Causa
L'attributo di trasparenza del costruttore predefinito di una classe derivata non è fondamentale quanto la trasparenza della classe di base.
Nota
Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.
Descrizione regola
I tipi e i membri che dispongono di SecurityCriticalAttribute non possono essere usati dal codice dell'applicazione Silverlight. I tipi e i membri critici per la sicurezza possono essere usati solo da codice attendibile nella libreria di classi .NET Framework per Silverlight. Poiché una costruzione pubblica o protetta in una classe derivata deve disporre della trasparenza uguale o superiore alla classe di base, una classe in un'applicazione non può essere derivata da una classe contrassegnata come SecurityCritical.
Per il codice della piattaforma CoreCLR, se un tipo di base ha un costruttore predefinito pubblico o protetto non trasparente, il tipo derivato deve rispettare le regole di ereditarietà del costruttore predefinite. Il tipo derivato deve inoltre avere un costruttore predefinito e tale costruttore deve essere almeno come costruttore predefinito critico del tipo di base.
Come correggere le violazioni
Per correggere la violazione, rimuovere il tipo o non derivare dal tipo non trasparente di sicurezza.
Quando eliminare gli avvisi
Non eliminare gli avvisi da questa regola. Le violazioni di questa regola in base al codice dell'applicazione genereranno il rifiuto di CoreCLR di caricare il tipo con un oggetto TypeLoadException.
Codice
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() { }
}
}
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