Condividi tramite


Avvisi di analisi del codice per il codice gestito ordinati per CheckId

Nella tabella seguente sono elencati gli avvisi di analisi del codice per il codice gestito ordinati per identificatore CheckId.

Avvisi

CheckId

Avviso

Descrizione

CA1000

CA1000: Non dichiarare membri statici su tipi generici

Quando viene chiamato un membro statico di un tipo generico, è necessario specificare l'argomento di tipo. Quando viene chiamato un membro di istanza generica che non supporta l'inferenza, è necessario specificare l'argomento di tipo relativo al membro. In questi due casi, la sintassi necessaria per specificare l'argomento di tipo è diversa e può generare confusione.

CA1001

CA1001: I tipi proprietari di campi Disposable devono essere Disposable

Una classe dichiara e implementa un campo di istanza di tipo System.IDisposable e la classe non implementa IDisposable. Una classe che dichiara un campo IDisposable è indirettamente proprietaria di una risorsa non gestita e deve implementare l'interfaccia IDisposable.

CA1002

CA1002: Non esporre elenchi generici

System.Collections.Generic.List<(Of <(T>)>) è un insieme generico progettato per le prestazioni, non per l'ereditarietà. List, pertanto, non contiene membri virtuali. Devono invece essere esposti gli insiemi generici che sono stati progettati per l'ereditarietà.

CA1003

Ca1003: Utilizzare istanze di gestori eventi generici

Un tipo contiene un delegato che restituisce void, la cui firma contiene due parametri (il primo è un oggetto e il secondo è un tipo assegnabile a EventArgs) e l'assembly che lo contiene è destinato a Microsoft .NET Framework 2.0.

CA1004

CA1004: I metodi generici devono fornire parametri di tipo

Per inferenza si intende la procedura con cui viene determinato l'argomento di tipo di un metodo generico in base al tipo di argomento passato al metodo, piuttosto che in base alla specifica esplicita dell'argomento di tipo. Per consentire l'inferenza, la firma di parametro di un metodo generico deve includere un parametro dello stesso tipo del parametro di tipo relativo al metodo. In tal caso non è necessario specificare l'argomento di tipo. Quando si utilizza l'inferenza per tutti i parametri di tipo, la sintassi necessaria per chiamare metodi di istanza generici e non generici è identica. In questo modo si semplifica l'usabilità dei metodi generici.

CA1005

CA1005: Evitare un uso eccessivo di parametri nei tipi generici

Quanto più è alto il numero di parametri di tipo contenuti, maggiore è la difficoltà di sapere e ricordare cosa rappresenta ciascun parametro. È in genere ovvio con un parametro di tipo, come in List<T>, e in alcuni casi che presentano due parametri di tipo, come in Dictionary<TKey, TValue>. Tuttavia, se il numero dei parametri di tipo è superiore a due, il livello di difficoltà sarà troppo elevato per la maggior parte degli utenti.

CA1006

CA1006: Non annidare tipi generici nelle firme dei membri

Un argomento di tipo annidato è un argomento di tipo che è anche un tipo generico. Per chiamare un membro la cui firma contiene un argomento di tipo annidato, l'utente deve creare un'istanza su un tipo generico e passare il tipo al costruttore di un secondo tipo generico. La sintassi e la procedura necessarie sono complesse ed è opportuno evitarle.

CA1007

CA1007: Utilizzare generics dove appropriato

Un metodo visibile esternamente contiene un parametro di riferimento di tipo System.Object. L'utilizzo di un metodo generico consente di passare al metodo tutti i tipi, soggetti a vincoli, senza prima eseguire il cast del tipo al tipo di parametro di riferimento.

CA1008

CA1008: Gli enum devono avere valore zero

Il valore predefinito di un'enumerazione non inizializzata, come altri tipi di valore, è zero. Un'enumerazione senza attributi flag definisce un membro utilizzando il valore zero in modo che il valore predefinito sia un valore valido dell'enumerazione. Se un'enumerazione a cui è applicato l'attributo FlagsAttribute definisce un membro con valore zero, il relativo nome deve essere "None" per indicare che nell'enumerazione non è stato impostato alcun valore.

CA1009

CA1009: Dichiarare correttamente i gestori eventi

I metodi di gestione eventi accettano due parametri. Il primo è di tipo System.Object ed è denominato "sender". Corrisponde all'oggetto che ha generato l'evento. Il secondo parametro è di tipo System.EventArgs ed è denominato "e". Questi sono i dati associati all'evento. I metodi del gestore eventi non restituiscono un valore. Nel linguaggio di programmazione C# il tipo restituito è void.

CA1010

CA1010: Gli insiemi devono implementare un'interfaccia generica

Per ampliare la possibilità di utilizzo di un insieme, implementare una delle interfacce di insiemi generici. L'insieme può quindi essere utilizzato per popolare tipi di insiemi generici.

CA1011

CA1011: Considerare il passaggio di tipi di base come parametri

Quando un tipo di base viene specificato come parametro in una dichiarazione di metodo, qualsiasi tipo derivato dal tipo di base può essere passato al metodo come argomento corrispondente. Se la funzionalità aggiuntiva fornita dal tipo di parametro derivato non è necessaria, l'utilizzo del tipo di base consente un utilizzo più ampio del metodo.

CA1012

CA1012: I tipi astratti non devono avere costruttori

I costruttori sui tipi astratti possono essere chiamati solo da tipi derivati. Poiché i costruttori pubblici creano istanze di un tipo e non è possibile creare istanze di un tipo astratto, per una buona progettazione non bisognerebbe creare un tipo astratto con costruttore pubblico.

CA1013

CA1013: Eseguire l'overload dell'operatore "uguale a" all'overload degli operatori di addizione e sottrazione

Un membro pubblico o protetto implementa gli operatori di addizione o sottrazione senza implementare l'operatore di uguaglianza.

CA1014

CA1014: Contrassegnare gli assembly con CLSCompliantAttribute

In Common Language Specification (CLS) vengono definite limitazioni di denominazione, tipi di dati e regole che gli assembly devono rispettare per poter essere utilizzati tra diversi linguaggi di programmazione. In una progettazione corretta tutti gli assembly devono indicare in modo esplicito la conformità CLS utilizzando CLSCompliantAttribute. Se questo attributo non è presente in un assembly, tale assembly non è conforme.

CA1016

CA1016: Contrassegnare gli assembly con AssemblyVersionAttribute

In .NET Framework viene utilizzato il numero di versione per identificare in modo univoco un assembly e per stabilire associazioni a tipi in assembly con nome sicuro. Il numero di versione viene utilizzato insieme ai criteri di versione ed editore. Per impostazione predefinita, le applicazioni vengono eseguite solo con la versione di assembly con cui sono state compilate.

CA1017

CA1017: Contrassegnare gli assembly con ComVisibleAttribute

ComVisibleAttribute determina il modo in cui i client COM accedono al codice gestito. In una buona progettazione gli assembly devono indicare in modo esplicito la visibilità COM. È possibile impostare la visibilità COM per l'intero assembly e quindi eseguirne l'override per singoli tipi e membri dei tipi. Se questo attributo non è presente, il contenuto dell'assembly è visibile ai client COM.

CA1018

CA1018: Contrassegnare gli attributi con AttributeUsageAttribute

Quando si definisce un attributo personalizzato, contrassegnarlo tramite AttributeUsageAttribute per indicare la posizione nel codice sorgente in cui applicare l'attributo personalizzato. Il significato e l'utilizzo previsto di un attributo ne determinano le posizioni valide nel codice.

CA1019

CA1019: Definire le funzioni di accesso per gli argomenti degli attributi

Gli attributi possono definire argomenti obbligatori che devono essere specificati quando si applica l'attributo a una destinazione. Sono inoltre noti come argomenti posizionali poiché vengono forniti ai costruttori di attributo come parametri posizionali. Per ogni argomento obbligatorio, l'attributo deve fornire anche una proprietà in sola lettura corrispondente in modo che il valore dell'argomento possa essere recuperato in fase di esecuzione. Gli attributi possono inoltre definire argomenti facoltativi, noti anche come argomenti denominati. Questi argomenti sono forniti ai costruttori degli attributi in base al nome e devono disporre di una proprietà in lettura e scrittura corrispondente.

CA1020

CA1020: Evitare l'utilizzo di spazi dei nomi con un numero ridotto di tipi

Accertarsi che ognuno degli spazi dei nomi disponga di un'organizzazione logica e che sia presente un motivo valido per inserire tipi in uno spazio dei nomi scarsamente popolato.

CA1021

CA1021: Evitare parametri out

Il passaggio di tipi per riferimento (mediante out o ref) richiede esperienza nell'utilizzo dei puntatori, nonché la conoscenza delle differenze tra tipi di valore e tipi di riferimento e dei metodi di gestione con più valori restituiti. Inoltre, la differenza tra parametri out e ref non è sempre nota.

CA1023

CA1023: Gli indicizzatori non devono essere multidimensionali

Gli indicizzatori, ovvero le proprietà indicizzate, devono utilizzare un indice singolo. Gli indicizzatori multidimensionali possono ridurre sensibilmente l'usabilità della libreria.

CA1024

CA1024: Utilizzare proprietà dove appropriato

Un metodo pubblico o protetto presenta un nome che inizia con "Get", non accetta parametri e restituisce un valore diverso da una matrice. Il metodo presenta tutte le caratteristiche per diventare una proprietà.

CA1025

Ca1025: Sostituire gli argomenti ripetitivi con una matrice di parametri

Utilizzare una matrice di parametri anziché argomenti ripetuti quando non si conosce il numero esatto di argomenti e quando gli argomenti variabili sono dello stesso tipo oppure possono essere passati come lo stesso tipo.

CA1026

CA1026: Evitare l'utilizzo di parametri predefiniti

I metodi che utilizzano parametri predefiniti sono consentiti dalla specifica CLS; questa specifica, tuttavia, consente ai compilatori di ignorare i valori assegnati a questi parametri. Per mantenere il comportamento desiderato tra diversi linguaggi di programmazione, è necessario sostituire i metodi che utilizzano parametri predefiniti con overload di metodi che forniscono i parametri predefiniti.

CA1027

CA1027: Contrassegnare le enumerazioni con FlagsAttribute

Un'enumerazione è un tipo di valore che definisce un insieme di costanti denominate correlate. Applicare FlagsAttribute a un'enumerazione quando le relative costanti denominate possono essere combinate in modo significativo.

CA1028

CA1028: L'archivio di enum deve essere Int32

Un'enumerazione è un tipo di valore che definisce un insieme di costanti denominate correlate. Per impostazione predefinita, il tipo di dati System.Int32 viene utilizzato per archiviare il valore costante. Benché sia possibile modificare il tipo sottostante, questa operazione non è necessaria né consigliata nella maggior parte degli scenari.

CA1030

CA1030: Utilizzare eventi dove appropriato

Questa regola rileva i metodi che presentano nomi comunemente utilizzati per gli eventi. Se un metodo viene chiamato in risposta a una modifica dello stato chiaramente definita, il metodo deve essere richiamato da un gestore eventi. Gli oggetti che chiamano il metodo devono generare eventi anziché chiamare direttamente il metodo.

CA1031

CA1031: Non rilevare tipi di eccezione generali

Le eccezioni generali non devono essere rilevate. Rilevare un'eccezione più specifica oppure generare nuovamente l'eccezione generale come ultima istruzione nel blocco catch.

CA1032

CA1032: Implementare costruttori di eccezioni standard

Se non viene fornito l'insieme completo di costruttori può risultare difficile gestire correttamente le eccezioni.

CA1033

CA1033: I metodi di interfaccia devono essere richiamabili dai tipi figlio

Un tipo visibile esternamente non sealed fornisce un'implementazione di metodo esplicita di un'interfaccia pubblica e non fornisce un metodo visibile esternamente alternativo con lo stesso nome.

CA1034

CA1034: I tipi annidati non devono essere visibili

Un tipo annidato è un tipo dichiarato nell'ambito di un altro tipo. I tipi annidati sono utili per incapsulare dettagli di implementazione privati del tipo contenitore. I tipi annidati utilizzati per questo scopo non devono essere visibili esternamente.

CA1035

CA1035: Le implementazioni di ICollection hanno membri fortemente tipizzati

La regola richiede che le implementazioni di ICollection forniscano membri fortemente tipizzati in modo che agli utenti non venga richiesto di eseguire il cast di argomenti al tipo Object quando utilizzano la funzionalità fornita dall'interfaccia. La regola presuppone che il tipo che implementa ICollection esegua questa operazione per gestire un insieme di istanze di un tipo più sicuro di Object.

CA1036

CA1036: Eseguire l'override di metodi su tipi confrontabili

Un tipo pubblico o protetto implementa l'interfaccia System.IComparable. Non esegue l'override di Object.Equals né l'overload dell'operatore specifico del linguaggio per uguaglianza, ineguaglianza, minore di o maggiore di.

CA1038

CA1038: Gli enumeratori devono essere fortemente tipizzati

Questa regola richiede che le implementazioni di IEnumerator forniscano anche una versione fortemente tipizzata della proprietà Current in modo che agli utenti non venga richiesto di eseguire il cast del valore restituito al tipo sicuro quando utilizzano la funzionalità fornita dall'interfaccia.

CA1039

CA1039: Gli elenchi sono fortemente tipizzati

La regola richiede che le implementazioni di IList forniscano membri fortemente tipizzati in modo che agli utenti non venga richiesto di eseguire il cast di argomenti al tipo System.Object quando utilizzano la funzionalità fornita dall'interfaccia.

CA1040

CA1040: Evitare l'utilizzo di interfacce vuote

Le interfacce definiscono membri che forniscono un comportamento o un contratto di utilizzo. La funzionalità descritta dall'interfaccia può essere adottata da qualsiasi tipo, indipendentemente dal punto in cui il tipo è visualizzato nella gerarchia di ereditarietà. Un tipo implementa un'interfaccia fornendo implementazioni per i membri dell'interfaccia. Un'interfaccia vuota non definisce alcun membro. Di conseguenza, non definisce un contratto implementabile.

CA1041

CA1041: Fornire una proprietà ObsoleteAttribute.Message

Un tipo o un membro viene contrassegnato utilizzando un attributo System.ObsoleteAttribute per cui non è stata specificata la proprietà ObsoleteAttribute.Message. Quando viene compilato un membro o un tipo contrassegnato utilizzando ObsoleteAttribute, viene visualizzata la proprietà Message dell'attributo. In questo modo vengono fornite le informazioni utente sul tipo o sul membro obsoleto.

CA1043

CA0143: Utilizzare argomento di tipo stringa o integrale per gli indicizzatori

Gli indicizzatori, ovvero le proprietà indicizzate, devono utilizzare tipi integrali o stringa per l'indice. Questi tipi vengono in genere utilizzati per l'indicizzazione di strutture di dati e aumentano l'utilizzabilità della libreria. L'utilizzo del tipo Object deve essere limitato ai casi in cui non sia possibile specificare in fase di progettazione il tipo integrale o stringa.

CA1044

CA1044: Le proprietà non devono essere in sola scrittura

Sebbene la presenza di proprietà di sola lettura sia accettabile e spesso necessaria, le linee guida di progettazione proibiscono l'utilizzo di proprietà di sola scrittura. Ciò è dovuto al fatto che consentire a un utente di impostare un valore e quindi impedirgli di visualizzarlo, non offre alcuna sicurezza. Inoltre, senza accesso in lettura, lo stato degli oggetti condivisi non può essere visualizzato, il che ne limita l'utilità.

CA1045

CA1045: Non passare i tipi per riferimento

Il passaggio di tipi per riferimento (mediante out o ref) richiede esperienza nell'utilizzo dei puntatori, nonché la conoscenza delle differenze tra tipi di valore e tipi di riferimento e dei metodi di gestione con più valori restituiti. Gli architetti di librerie destinate a un pubblico generico non devono aspettarsi che gli utenti siano in grado di utilizzare i parametri out o ref.

CA1046

CA1046: Non eseguire l'overload dell'operatore "uguale a" per i tipi di riferimento

Per i tipi di riferimento, l'implementazione predefinita dell'operatore di uguaglianza è quasi sempre corretta. Per impostazione predefinita, i due riferimenti sono uguali solo se puntano allo stesso oggetto.

CA1047

CA1047: Non dichiarare membri protetti nei tipi sealed

I tipi dichiarano membri protetti in modo che i tipi che ereditano possano accedere al membro o eseguirne l'override. Per definizione, non è possibile ereditare tipi sealed, pertanto non è possibile chiamare metodi protetti su tipi sealed.

CA1048

CA1048: Non dichiarare membri virtuali nei tipi sealed

I tipi dichiarano metodi come virtuali in modo che l'ereditarietà di tipi possa eseguire l'override dell'implementazione del metodo virtuale. Per definizione, non è possibile ereditare un tipo sealed. Di conseguenza, un metodo virtuale su un tipo sealed risulterà non significativo.

CA1049

CA1049: I tipi delle risorse native devono essere Disposable

I tipi che allocano risorse non gestite devono implementare IDisposable per consentire ai chiamanti di rilasciare quelle risorse su richiesta e ridurre la durata degli oggetti che le contengono.

CA1050

CA1050: Dichiarare i tipi negli spazi dei nomi

I tipi vengono dichiarati in spazi dei nomi per impedire conflitti di denominazione e per organizzare i tipi correlati in una gerarchia di oggetti.

CA1051

CA1051: Non dichiarare campi di istanza visibili

L'utilizzo principale di un campo deve essere come dettaglio di implementazione. I campi devono essere privati o interni e devono essere esposti tramite proprietà.

CA1052

CA1052: I tipi che contengono membri statici devono essere sealed

Un tipo pubblico o protetto contiene solo membri statici e non è dichiarato utilizzando il modificatore (NotInheritable) (Riferimenti per C#) sealed. Un tipo non adatto a essere ereditato deve essere contrassegnato utilizzando il modificatore sealed per impedire che venga utilizzato come tipo di base.

CA1053

CA1053: I tipi che contengono membri statici non devono avere costruttori

Un tipo pubblico o annidato dichiara solo membri statici e presenta un costruttore predefinito pubblico o protetto. Il costruttore non è necessario perché la chiamata a membri statici non richiede un'istanza del tipo. A scopo di sicurezza e protezione, l'overload dei valori di stringa deve chiamare l'overload URI tramite l'argomento stringa.

CA1054

CA1054: I parametri URI non devono essere stringhe

Se un metodo accetta una rappresentazione in forma di stringa di un URI, è necessario fornire un overload corrispondente che accetti un'istanza della classe URI che fornisce questi servizi in modo sicuro e protetto.

CA1055

CA1055: I valori restituiti URI non devono essere stringhe

Questa regola presuppone che il metodo restituisca un URI. Una rappresentazione in forma di stringa di un URI è soggetta a errori di analisi e codifica e può creare vulnerabilità nella sicurezza. La classe System.Uri fornisce questi servizi in modo sicuro e protetto.

CA1056

CA1056: Le proprietà URI non devono essere stringhe

Questa regola presuppone che la proprietà rappresenti un URI (Uniform Resource Identifier). Una rappresentazione in forma di stringa di un URI è soggetta a errori di analisi e codifica e può creare vulnerabilità nella sicurezza. La classe System.Uri fornisce questi servizi in modo sicuro e protetto.

CA1057

CA1057: Gli overload URI dei valori di stringa chiamano gli overload System.Uri

Un tipo dichiara overload del metodo che risultano diversi solo per la sostituzione di un parametro di stringa con un parametro System.Uri. L'overload che accetta il parametro di stringa non chiama l'overload che accetta il parametro URI.

CA1058

CA1058: I tipi non devono estendere tipi di base specifici

Un tipo visibile esternamente estende tipi di base specifici. Utilizzare una delle alternative seguenti:

CA1059

CA1059: I membri non devono esporre tipi concreti specifici

Un tipo concreto è un tipo con implementazione completa, pertanto è possibile crearne un'istanza. Per consentire un utilizzo esteso del membro, sostituire il tipo concreto utilizzando l'interfaccia suggerita.

CA1060

CA1060: Spostare i P/Invoke nella classe NativeMethods

I metodi di chiamata al sistema operativo, ad esempio quelli contrassegnati utilizzando l'attributo System.Runtime.InteropServices.DllImportAttribute, o i metodi definiti mediante la parola chiave Declare in Visual Basic accedono a codice non gestito. Questi metodi devono appartenere alla classe NativeMethods, SafeNativeMethods o UnsafeNativeMethods.

CA1061

CA1061: Non nascondere i metodi di una classe base

Un metodo di un tipo di base è nascosto da un metodo denominato in modo identico in un tipo derivato, quando la firma del parametro del metodo derivato differisce solo per i tipi che presentano una derivazione più debole rispetto ai tipi corrispondenti nella firma del parametro del metodo di base.

CA1062

CA1062: Convalidare gli argomenti di metodi pubblici

È necessario che tutti gli argomenti di riferimento passati a metodi visibili esternamente vengano sottoposti a verifica per accertarsi che non corrispondano a valori Null.

CA1063

CA1063: Implementare IDisposable correttamente

È necessario che tutti i tipi IDisposable implementino correttamente il modello Dispose.

CA1064

CA1064: Le eccezioni devono essere pubbliche

Un'eccezione interna è visibile solo nel relativo ambito interno. Se l'eccezione si verifica al di fuori dell'ambito interno, può essere rilevata solo tramite l'eccezione di base. Se l'eccezione interna è ereditata da T:System.Exception, T:System.SystemException o T:System.ApplicationException, il codice esterno non disporrà di informazioni sufficienti per la corretta gestione dell'eccezione.

CA1065

CA1065: Non generare eccezioni in posizioni non previste

Un metodo che normalmente non genera eccezioni genera un'eccezione.

CA1300

CA1300: Specificare MessageBoxOptions

Per visualizzare correttamente una finestra di messaggio per le impostazioni cultura che utilizzano un ordine di lettura da destra a sinistra, è necessario passare i membri RightAlign e RtlReading dell'enumerazione MessageBoxOptions al metodo Show.

CA1301

CA1301: Evitare tasti di scelta rapida duplicati

Un tasto di scelta o tasto di scelta rapida consente l'accesso da tastiera a un controllo mediante ALT. Quando più controlli presentano tasti di scelta duplicati, il comportamento del tasto di scelta non è ben definito.

CA1302

CA1302: Non impostare come hardcoded le stringhe delle impostazioni locali

L'enumerazione System.Environment.SpecialFolder contiene membri che fanno riferimento a cartelle di sistema speciali. I percorsi di queste cartelle possono presentare valori diversi in sistemi operativi diversi. I percorso possono essere modificati e sono localizzati. Il metodo Environment.GetFolderPath restituisce i percorsi associati all'enumerazione Environment.SpecialFolder, localizzati e appropriati per il computer attualmente in esecuzione.

CA1303

CA1303: Non passare valori letterali come parametri localizzati

Un metodo visibile esternamente passa una stringa letterale come parametro a un costruttore o a un metodo nella libreria di classi .NET Framework e questa stringa deve essere localizzabile.

CA1304

CA1304: Specificare CultureInfo

Un metodo o un costruttore chiama un membro che presenta un overload che accetta un parametro System.Globalization.CultureInfo e tale metodo o costruttore non chiama l'overload che accetta il parametro CultureInfo. Quando non viene fornito un oggetto CultureInfo o System.IFormatProvider, il valore predefinito fornito dal membro di overload potrebbe non avere l'effetto desiderato in tutte le impostazioni locali.

CA1305

CA1305: Specificare IFormatProvider

Un metodo o un costruttore chiama uno o più membri con overload che accettano un parametro System.IFormatProvider e tale metodo o costruttore non chiama l'overload che accetta il parametro IFormatProvider. Quando non viene fornito un oggetto System.Globalization.CultureInfo o IFormatProvider, il valore predefinito fornito dal membro di overload potrebbe non avere l'effetto desiderato in tutte le impostazioni locali.

CA1306

CA1306: Specificare le impostazioni locali per i tipi di dati

Le impostazioni locali determinano elementi di presentazione specifici delle impostazioni cultura per i dati, ad esempio la formattazione utilizzata per valori numerici, simboli di valuta e criterio di ordinamento. Quando si crea un oggetto DataTable o DataSet, è opportuno definire in modo esplicito le impostazioni locali.

CA1307

CA1307: Specificare StringComparison

Un'operazione di confronto tra stringhe utilizza un overload del metodo che non imposta un parametro StringComparison.

CA1308

CA1308: Normalizzare le stringhe in lettere maiuscole

Le stringhe devono essere normalizzate in maiuscolo. Un piccolo gruppo di caratteri non è in grado di completare un round trip in caso di conversione in lettere minuscole.

CA1309

CA1309: Utilizza StringComparison ordinale

In un'operazione di confronto tra stringhe di tipo non linguistico il parametro StringComparison non viene impostato su Ordinal o OrdinalIgnoreCase. L'impostazione esplicita del parametro su StringComparison.Ordinal o StringComparison.OrdinalIgnoreCase consente spesso di rendere il codice più veloce, corretto e affidabile.

CA1400

CA1400: I punti di ingresso P/Invoke devono esistere

Un metodo pubblico o protetto è contrassegnato utilizzando l'attributo System.Runtime.InteropServices.DllImportAttribute. Non è possibile individuare la libreria non gestita né associare il metodo a una funzione nella libreria.

CA1401

CA1401: I P/Invoke non devono essere visibili

Un metodo pubblico o protetto in un tipo pubblico presenta l'attributo System.Runtime.InteropServices.DllImportAttribute (implementato anche dalla parola chiave Declare in Visual Basic). Questi metodi non devono essere esposti.

CA1402

CA1402: Evitare gli overload nelle interfacce visibili a COM

Quando i metodi sottoposti a overload vengono esposti ai client COM, solo il primo overload di metodo conserva il proprio nome. Gli overload successivi vengono rinominati in modo univoco aggiungendo al nome un carattere di sottolineatura (_) e un numero intero che corrisponde all'ordine di dichiarazione dell'overload.

CA1403

CA1403: I tipi layout automatici non devono essere visibili a COM

Un tipo di valore visibile a COM è contrassegnato utilizzando l'attributo System.Runtime.InteropServices.StructLayoutAttribute impostato su LayoutKind.Auto. Il layout di tali tipi può variare a seconda delle versioni di .NET Framework, con conseguente compromissione delle funzionalità dei client COM che prevedono un layout specifico.

CA1404

CA1404: Chiamare GetLastError immediatamente dopo P/Invoke

Viene effettuata una chiamata al metodo Marshal.GetLastWin32Error o alla funzione GetLastError Win32 equivalente e la chiamata immediatamente precedente non è una chiamata a un metodo di chiamata del sistema operativo.

CA1405

CA1405: I tipi di base del tipo visibile a COM devono essere visibili a COM

Un tipo visibile a COM deriva da un tipo non visibile a COM.

CA1406

CA1406: Evitare gli argomenti Int64 per i client Visual Basic 6

I client COM Visual Basic 6 non sono in grado di accedere a Integer a 64 bit.

CA1407

CA1407: Evitare i membri statici nei tipi visibili a COM

COM non supporta i metodi statici.

CA1408

CA1408: Non utilizzare AutoDual ClassInterfaceType

I tipi che utilizzano un'interfaccia duale consentono l'associazione dei client a uno specifico layout di interfaccia. Eventuali modifiche apportate in una versione futura al layout del tipo o ai tipi base interromperanno l'associazione dei client COM all'interfaccia. Per impostazione predefinita, se l'attributo ClassInterfaceAttribute non è specificato, viene utilizzata un'interfaccia di solo invio.

CA1409

CA1409: I tipi visibili a COM devono essere creabili

Un tipo di riferimento contrassegnato specificatamente come visibile a COM contiene un costruttore con parametri pubblico, ma non contiene un costruttore predefinito pubblico senza parametri. Un tipo senza un costruttore predefinito pubblico non può essere creato da client COM.

CA1410

CA1410: I metodi di registrazione COM devono corrispondere

In un tipo viene dichiarato un metodo contrassegnato utilizzando l'attributo System.Runtime.InteropServices.ComRegisterFunctionAttribute, ma non un metodo contrassegnato utilizzando l'attributo System.Runtime.InteropServices.ComUnregisterFunctionAttribute o viceversa.

CA1411

CA1411: I metodi di registrazione COM non devono essere visibili

Un metodo contrassegnato utilizzando l'attributo System.Runtime.InteropServices.ComRegisterFunctionAttribute o System.Runtime.InteropServices.ComUnregisterFunctionAttribute è visibile esternamente.

CA1412

CA1412: Contrassegnare le interfacce ComSource come IDispatch

Un tipo è contrassegnato utilizzando l'attributo System.Runtime.InteropServices.ComSourceInterfacesAttribute e almeno una delle interfacce specificate non è contrassegnata utilizzando l'attributo System.Runtime.InteropServices.InterfaceTypeAttribute impostato su ComInterfaceType.InterfaceIsIDispatch.

CA1413

CA1413: Evitare i campi non pubblici nei tipi valore visibili a COM

I campi di istanza non pubblici di tipi di valori visibili a COM sono visibili ai client COM. Esaminare il contenuto dei campi alla ricerca di informazioni che non devono essere esposte o che avranno un impatto non previsto sulla progettazione o la sicurezza.

CA1414

CA1414: Contrassegnare gli argomenti P/Invoke booleani con MarshalAs

Per il tipo di dati booleano sono disponibili più rappresentazioni nel codice non gestito.

CA1415

CA1415: Dichiarare correttamente i P/Invoke

Tramite questa regola vengono cercate le dichiarazioni di metodo di chiamata al sistema operativo per le funzioni Win32 con un puntatore a un parametro di struttura OVERLAPPED e il cui parametro gestito corrispondente non è un puntatore a una struttura System.Threading.NativeOverlapped.

CA1500

CA1500: I nomi delle variabili non devono corrispondere ai nomi dei campi

Un metodo di istanza dichiara un parametro o una variabile locale il cui nome corrisponde a un campo di istanza del tipo dichiarante, pertanto vengono generati errori.

CA1501

CA1501: Evitare ereditarietà eccessiva

Un tipo si trova oltre il quarto livello di annidamento nella gerarchia di ereditarietà. Le gerarchie di tipi eccessivamente annidate possono comportare difficoltà di comprensione e gestione.

CA1502

CA1502: Evitare complessità eccessiva

Questa regola misura il numero di percorsi linearmente indipendenti tramite il metodo, determinato dal numero e dalla complessità di rami condizionali.

CA1504

CA1504: Controllare i nomi dei campi fuorvianti

Il nome di un campo di istanza inizia con "s_" o il nome di un campo statico (Shared in Visual Basic) inizia con "m_".

CA1505

CA1505: evitare codice non manutenibile

Un tipo o metodo presenta un valore di indice di gestibilità basso. Un indice di manutenibilità basso indica che un tipo o un metodo è probabilmente difficile da gestire e sarebbe un buon candidato per la riprogettazione.

CA1506

CA1506: Evitare un numero eccessivo di accoppiamenti di classi

Questa regola misura l'accoppiamento tra classi contando il numero di riferimenti al tipo univoci contenuti in un tipo o metodo.

CA1600

CA1600: Non impostare la priorità del processo su Inattivo

Non impostare la priorità del processo su Inattivo. I processi con System.Diagnostics.ProcessPriorityClass.Idle occupano la CPU, che diversamente sarebbe inattiva, e bloccano quindi la modalità standby.

CA1601

CA1601: Non utilizzare i timer che impediscono le modifiche allo stato di potenza

Una frequenza maggiore per l'attività periodica occupa la CPU e interferisce con i timer di inattività per il risparmio di energia tramite cui vengono disattivati lo schermo e i dischi rigidi.

CA1700

CA1700: Non denominare 'Reserved' i valori di enumerazione

Questa regola presuppone che un membro di enumerazione con un nome che contiene la parola "reserved" non sia attualmente utilizzato, ma sia un segnaposto che dovrà essere rinominato o rimosso in una versione futura. La ridenominazione o rimozione di un membro è ritenuta una modifica sostanziale.

CA1701

CA1701: Le parole composte di una stringa di risorsa devono essere digitate correttamente con distinzione tra maiuscole e minuscole

Ogni parola nella stringa di risorsa è suddivisa in token basati sulla distinzione tra maiuscole e minuscole. Ogni combinazione di due token contigui viene controllata in base alla libreria del correttore ortografico Microsoft. Se riconosciuta, la parola produce una violazione della regola.

CA1702

CA1702: Le parole composte devono essere digitate correttamente con distinzione tra maiuscole e minuscole

Il nome di un identificatore contiene più parole, fra cui almeno una che sembra essere composta e digitata in modo non corretto con distinzione tra maiuscole e minuscole.

CA1703

CA1703: Le stringhe di risorsa devono essere digitate correttamente

Una stringa di risorsa contiene una o più parole che non sono riconosciute dalla libreria del correttore ortografico Microsoft.

CA1704

CA1704: Gli identificatori devono essere digitati correttamente

Il nome di un identificatore visibile esternamente contiene una o più parole che non sono riconosciute dalla libreria del correttore ortografico Microsoft.

CA1707

CA1707: Gli identificatori non devono contenere caratteri di sottolineatura

Per convenzione i nomi degli identificatori non contengono il carattere di sottolineatura (_). In base a questa regola vengono controllati spazi dei nomi, tipi, membri e parametri.

CA1708

CA1708: Gli identificatori non si devono differenziare solo in base alle maiuscole e minuscole

Gli identificatori per spazi dei nomi, tipi, membri e parametri non possono differire solo in base a maiuscole e minuscole poiché ai linguaggi destinati a Common Language Runtime non è richiesta la distinzione tra maiuscole e minuscole.

CA1709

CA1709: Gli identificatori devono essere digitati correttamente con distinzione tra maiuscole e minuscole

Per convenzione i nomi di parametro sono basati sulla convenzione Camel, mentre i nomi di spazio dei nomi, tipo e membro utilizzano la convenzione Pascal.

CA1710

CA1710: Gli identificatori devono contenere il suffisso corretto

Per convenzione, i nomi dei tipi che estendono determinati tipi di base o implementano determinate interfacce o dei tipi derivati da questi tipi contengono un suffisso associato al tipo di base o all'interfaccia.

CA1711

CA1711: Gli identificatori non devono contenere un suffisso non corretto

Per convenzione, solo i nomi dei tipi che estendono determinati tipi di base o che implementano determinate interfacce o dei tipi derivati da questi tipi devono terminare con suffissi specifici riservati. Gli altri nomi di tipi non devono utilizzare questi suffissi riservati.

CA1712

CA1712: Non utilizzare nomi di tipo come prefisso nei valori di enumerazione

I nomi dei membri di enumerazione non hanno come prefisso il nome del tipo poiché si prevede che le informazioni sul tipo vengano fornite dagli strumenti di sviluppo.

CA1713

CA1713: Non utilizzare il prefisso Before o After negli eventi

Il nome di un evento inizia con "Before" o "After". Per denominare eventi correlati generati in una sequenza specifica, utilizzare i tempi verbali presente o passato per indicare la posizione relativa nella sequenza di azioni.

CA1714

CA1714: Le enumerazioni con Flags devono avere nomi plurali

Un'enumerazione pubblica dispone dell'attributo System.FlagsAttribute e il nome non termina per "s". Ai tipi contrassegnati utilizzando FlagsAttribute sono assegnati nomi plurali perché tale attributo indica che è possibile specificare più valori.

CA1715

CA1715: Gli identificatori devono contenere il prefisso corretto

Il nome di un'interfaccia visibile esternamente non inizia con una "I" maiuscola. Il nome di un parametro di tipo generico su un tipo o metodo visibile esternamente non inizia con una "T" maiuscola.

CA1716

CA1716: Gli identificatori non devono corrispondere a parole chiave

Un nome di spazio dei nomi o di tipo corrisponde a una parola chiave riservata in un linguaggio di programmazione. Gli identificatori di spazi dei nomi e tipi non devono corrispondere a parole chiave definite dai linguaggi con destinazione Common Language Runtime.

CA1717

CA1717: Solo le enumerazioni con FlagsAttribute devono avere nomi plurali

In base alle convenzioni di denominazione, un nome plurale in un'enumerazione indica che è possibile specificare più valori di enumerazione contemporaneamente.

CA1719

CA1719: I nomi dei parametri non devono corrispondere ai nomi dei membri

Un nome di parametro deve comunicare il significato di un parametro e un nome di membro deve comunicare il significato di un membro. Le progettazioni in cui questi nomi coincidono sono rare. Assegnare a un parametro lo stesso nome del relativo membro non è intuitiva e rende più complesso l'utilizzo della libreria.

CA1720

CA1720: Gli identificatori non devono contenere nomi di tipo

Il nome di un parametro in un membro visibile esternamente contiene un nome di tipo di dati oppure il nome di un membro visibile esternamente contiene un nome di tipo di dati specifico del linguaggio.

CA1721

CA1721: I nomi delle proprietà non devono corrispondere ai metodi get

Il nome di un membro pubblico o protetto inizia con "Get" e corrisponde in altro modo al nome di una proprietà pubblica o protetta. " Le proprietà e i metodi "Get" devono avere nomi che distinguano chiaramente la loro funzione.

CA1722

CA1722: Gli identificatori non devono contenere il prefisso non corretto

Per convenzione, solo determinati elementi di programmazione presentano nomi che iniziano con un prefisso specifico.

CA1724

CA1724: I nomi dei tipi non devono corrispondere agli spazi dei nomi

I nomi dei tipi non devono corrispondere ai nomi degli spazi dei nomi definiti nella libreria di classi .NET Framework. La violazione di questa regola può ridurre l'utilizzabilità della libreria.

CA1725

CA1725: I nomi dei parametri devono corrispondere alla dichiarazione di base

Una denominazione coerente dei parametri in una gerarchia di override aumenta la funzionalità degli override di metodo. Un nome di parametro in un metodo derivato diverso dal nome nella dichiarazione di base può provocare confusione sulla natura del metodo, ovvero se si tratta di un override del metodo di base o di un nuovo overload del metodo.

CA1726

CA1726: Utilizzare termini preferiti

Il nome di un identificatore visibile esternamente include un termine per il quale esiste un termine alternativo preferito. In alternativa, il nome include il termine "Flag" o "Flags".

CA1800

CA1800: Non eseguire il cast inutilmente

I cast duplicati comportano una riduzione delle prestazioni, in particolare quando i cast vengono eseguiti in istruzioni di iterazione compatte.

CA1801

CA1801: Rivedere i parametri inutilizzati

Una firma di metodo include un parametro non utilizzato nel corpo del metodo.

CA1802

CA1802: Utilizza valori letterali dove appropriato

Un campo viene dichiarato static e read-only (Shared e ReadOnly in Visual Basic) e viene inizializzato utilizzando un valore calcolabile in fase di compilazione. Dal momento che il valore assegnato al campo di destinazione è calcolabile in fase di compilazione, modificare la dichiarazione in un campo const (Const in Visual Basic) in modo che il calcolo del valore venga effettuato in fase di compilazione anziché in fase di esecuzione.

CA1804

CA1804: rimuovere locali non utilizzati

Le variabili locali inutilizzate e le assegnazioni non necessarie comportano un aumento delle dimensioni dell'assembly e una riduzione delle prestazioni.

CA1806

CA1806: Non ignorare i risultati dei metodi

Un nuovo oggetto viene creato, ma non viene mai utilizzato oppure viene chiamato un metodo che crea e restituisce una nuova stringa e la nuova stringa non viene mai utilizzata oppure un metodo COM o P/Invoke restituisce un HRESULT o un codice di errore che non viene mai utilizzato.

CA1809

CA1809: Evitare un numero eccessivo di variabili locali

Un'ottimizzazione comune delle prestazioni consiste nell'archiviare un valore in un registro del processore anziché in memoria. Tale procedura è definita "registrazione del valore". Per aumentare la possibilità di registrazione di tutte le variabili locali, limitare il numero di tali variabili a 64.

CA1810

CA1810: Inizializzare i campi statici del tipo di riferimento inline

Quando un tipo dichiara un costruttore statico esplicito, tramite il compilatore JIT (Just-In-Time) viene aggiunto un controllo a ogni metodo statico del tipo e a ogni costruttore di istanza del tipo per assicurare che il costruttore statico sia stato precedentemente chiamato. I controlli dei costruttori statici possono ridurre le prestazioni.

CA1811

CA1811: Evitare il codice privato non chiamato

Un membro privato o interno (a livello di assembly) non presenta chiamanti nell'assembly, non viene richiamato da Common Language Runtime né da un delegato.

CA1812

CA1812: Evitare classi interne prive di istanze

Un'istanza di un tipo a livello di assembly non viene creata dal codice nell'assembly.

CA1813

CA1813: Evitare attributi non sealed

La libreria di classi .NET Framework fornisce metodi per recuperare attributi personalizzati. Per impostazione predefinita, questi metodi eseguono ricerche nella gerarchia di ereditarietà dell'attributo. L'utilizzo di attributi sealed elimina la ricerca nella gerarchia di ereditarietà e può migliorare le prestazioni.

CA1814

CA1814: Preferire matrici di matrici rispetto a matrici multidimensionali

Una matrice di matrici è una matrice i cui elementi sono costituiti da matrici. Poiché le matrici che costituiscono gli elementi possono presentare dimensioni diverse, la quantità di spazio inutilizzato sarà inferiore per alcuni insiemi di dati.

CA1815

CA1815: Eseguire l'override di Equals e dell'operatore "uguale a" sui tipi di valore

Per i tipi di valore, l'implementazione ereditata di Equals utilizza la libreria Reflection e confronta il contenuto di tutti i campi. La libreria Reflection è onerosa dal punto di vista del calcolo, inoltre il confronto di ogni campo per determinarne l'uguaglianza potrebbe essere superfluo. Se si prevede che gli utenti confrontino o ordinino le istanze oppure le utilizzino come chiavi di tabelle hash, il tipo di valore deve implementare Equals.

CA1816

CA1816: Chiamare GC.SuppressFinalize correttamente

Un metodo che costituisce un'implementazione di Dispose non chiama GC.SuppressFinalize oppure un metodo che non costituisce un'implementazione di Dispose chiama GC.SuppressFinalize oppure un metodo chiama GC.SuppressFinalize e passa un elemento diverso da this (Me in Visual Basic).

CA1819

CA1819: Le proprietà non devono restituire matrici

Le matrici restituite dalle proprietà non sono protette in scrittura, anche se la proprietà è in sola lettura. Affinché la matrice sia protetta da eventuali alterazioni, la proprietà deve restituire una copia della matrice. In genere, gli utenti non comprendono le implicazioni negative sulle prestazioni derivanti dalla chiamata di tale proprietà.

CA1820

CA1820: Testare le stringhe vuote utilizzando la lunghezza di stringa

Il confronto tra stringhe mediante la proprietà String.Length o il metodo String.IsNullOrEmpty è notevolmente più veloce rispetto all'utilizzo di Equals.

CA1821

CA1821: Rimuovere i finalizzatori vuoti

Quando possibile, evitare di utilizzare i finalizzatori per non sovraccaricare ulteriormente le prestazioni durante il rilevamento della durata dell'oggetto. Un finalizzatore vuoto provoca un sovraccarico aggiuntivo e non fornisce alcun vantaggio.

CA1822

CA1822: Contrassegna i membri come statici

I membri che non accedono ai dati di istanza o non chiamano metodi di istanza possono essere contrassegnati come static (Shared in Visual Basic). Tramite il compilatore verranno quindi inviati siti di chiamata non virtuali a tali membri. Si potrà così ottenere un sensibile miglioramento delle prestazioni per codici sensibili alle prestazioni.

CA1823

CA1823: Evitare campi privati non utilizzati

Sono stati rilevati campi privati che non sembrano essere utilizzati all'interno dell'assembly.

CA1824

CA1824: Contrassegnare gli assembly con NeutralResourcesLanguageAttribute

L'attributo NeutralResourcesLanguage indica a ResourceManager la lingua utilizzata per visualizzare le risorse delle impostazioni cultura non associate ad alcun paese per un assembly. Tale approccio migliora le prestazioni delle ricerche per la prima risorsa caricata e riduce il working set.

CA1900

CA1900: I campi dei tipi di valore devono essere portabili

Questa regola consente di verificare che le strutture dichiarate utilizzando layout esplicito vengano allineate correttamente quando viene eseguito il marshalling a codice non gestito nei sistemi operativi a 64 bit.

CA1901

CA1901: Le dichiarazioni P/Invoke devono essere portabili

La regola valuta la dimensione di ciascun parametro e il valore restituito di P/Invoke e verifica che la dimensione del parametro sia corretta quando viene eseguito il marshalling a codice non gestito in sistemi operativi a 32 e a 64 bit.

CA1903

CA1903: Utilizzare solo API della versione di .NET Framework di destinazione

Un membro o un tipo sta utilizzando un membro o un tipo introdotto in un service pack non incluso con la versione di .NET Framework di destinazione del progetto.

CA2000

CA2000: Eliminare gli oggetti prima di perdere l'ambito

Poiché è possibile che si verifichi un evento eccezionale che impedisca l'esecuzione del finalizzatore di un oggetto, è opportuno eliminare in modo esplicito l'oggetto prima che tutti i riferimenti a tale oggetto siano esterni all'ambito.

CA2001

CA2001: Evitare le chiamate a metodi problematici

Un membro chiama un metodo potenzialmente pericoloso o problematico.

CA2002

CA2002: Non bloccare oggetti con identità debole

Un oggetto presenta un'identità debole quando è possibile accedere ad esso direttamente attraverso i confini dei domini applicazione. Un thread che tenta di acquisire un blocco su un oggetto con identità debole può essere bloccato da un secondo thread in un altro dominio applicazione con un blocco sullo stesso oggetto.

CA2003

CA2003: Non considerare i fiber come i thread

Un thread gestito viene considerato come thread Win32.

CA2004

CA2004: Rimuovere le chiamate a GC.KeepAlive

Se si effettua la conversione all'utilizzo di SafeHandle, rimuovere tutte le chiamate a GC.KeepAlive (oggetto). In questo caso, non è necessario che le classi chiamino GC.KeepAlive. Questo comportamento presuppone che non dispongano di un finalizzatore, ma utilizzino SafeHandle per finalizzare l'handle OS al loro posto.

CA2006

CA2006: Utilizzare SafeHandle per incapsulare le risorse native

L'utilizzo di IntPtr nel codice gestito potrebbe indicare un potenziale problema di sicurezza e affidabilità. Tutte le occorrenze di IntPtr devono essere esaminate per stabilire se al loro posto è necessario utilizzare SafeHandle o una tecnologia simile.

CA2100

CA2100: Controllare la vulnerabilità della sicurezza nelle query SQL

Un metodo imposta la proprietà System.Data.IDbCommand.CommandText utilizzando una stringa compilata da un argomento stringa nel metodo. La regola presuppone che l'argomento stringa contenga l'input dell'utente. Una stringa di comando SQL compilata da un input dell'utente è vulnerabile agli attacchi intrusivi nel codice SQL,

CA2101

CA2101: Specificare il marshalling per gli argomenti di stringa P/Invoke

Un membro di platform invoke consente i chiamanti parzialmente attendibili, presenta un parametro di stringa e non esegue il marshalling della stringa. Questo può comportare una potenziale vulnerabilità di sicurezza.

CA2102

CA2102: Individuare le eccezioni non conformi a CLS nei gestori generali

In un membro di un assembly che non è contrassegnato utilizzando l'attributo RuntimeCompatibilityAttribute o che è contrassegnato con RuntimeCompatibility(WrapNonExceptionThrows = false) è incluso un blocco catch che gestisce System.Exception e che non contiene un blocco catch generale immediatamente successivo.

CA2103

CA2103: Controllare la sicurezza imperativa

Un metodo utilizza la sicurezza imperativa e potrebbe costruire l'autorizzazione tramite le informazioni sullo stato o i valori restituiti che possono essere modificati mentre la richiesta è attiva. Utilizzare la sicurezza dichiarativa quando possibile.

CA2104

CA2104: Non dichiarare tipi di riferimento modificabili in sola lettura

Un tipo visibile esternamente contiene un campo in sola lettura visibile esternamente che costituisce un tipo di riferimento modificabile. Un tipo modificabile è un tipo i cui dati di istanza possono essere modificati.

CA2105

CA2105: I campi di matrici non devono essere di sola lettura

Quando si applica il modificatore (ReadOnly in Visual Basic) in sola lettura a un campo contenente una matrice, il campo non può essere modificato in modo da fare riferimento a una matrice diversa. È tuttavia possibile modificare gli elementi della matrice archiviati in un campo in sola lettura.

CA2106

CA2106: Asserzioni protette

Un metodo asserisce un'autorizzazione e non vengono eseguiti controlli di sicurezza sul chiamante. Quando si asserisce un'autorizzazione di sicurezza senza eseguire alcun controllo di sicurezza, nel codice potrebbero restare punti deboli nella sicurezza.

CA2107

CA2107: Controllare l'utilizzo di Deny e PermitOnly

Il metodo PermitOnly e le azioni di sicurezza CodeAccessPermission.Deny devono essere utilizzati esclusivamente da utenti con una conoscenza approfondita della sicurezza .NET Framework. Il codice che utilizza queste azioni di sicurezza deve essere sottoposto a una revisione della sicurezza.

CA2108

CA2108: Controllare la sicurezza dichiarativa sui tipi di valori

Un tipo di valore pubblico o protetto è protetto da richieste di collegamento o accesso ai dati.

CA2109

CA2109: Controllare i gestori di eventi visibili

È stato rilevato un metodo di gestione eventi pubblico o protetto. I metodi di gestione eventi non devono essere esposti se non assolutamente necessario.

CA2111

CA2111: I puntatori non devono essere visibili

Un puntatore non è privato, interno o in sola lettura. Il valore del puntatore può essere modificato dal codice dannoso e ciò può consentire potenzialmente l'accesso a percorsi arbitrari nella memoria o causare errori dell'applicazione o del sistema.

CA2112

CA2112: I tipi protetti non devono esporre campi

In un tipo pubblico o protetto sono inclusi campi pubblici; tale tipo viene protetto da richieste di collegamento. Se il codice ha accesso a un'istanza di un tipo protetta da una richiesta di collegamento, non è necessario che il codice soddisfi la richiesta di collegamento per accedere ai campi del tipo.

CA2114

CA2114: La sicurezza del metodo deve essere un superset del tipo

Un metodo non può presentare sicurezza dichiarativa sia a livello di metodo sia a livello di tipo per la stessa azione.

CA2115

CA2115: Chiamare GC.KeepAlive durante l'utilizzo di risorse native

Questa regola rileva gli errori che possono verificarsi qualora una risorsa non gestita venga completata mentre è ancora utilizzata da codice non gestito.

CA2116

CA2116: I metodi APTCA devono chiamare solo metodi APTCA

Quando APTCA (AllowPartiallyTrustedCallersAttribute) è presente in un assembly completamente attendibile e l'assembly esegue codice in un altro assembly che non consente chiamanti parzialmente attendibili, è possibile che si verifichi una violazione della sicurezza.

CA2117

CA2117: I tipi APTCA devono estendere solo tipi di base APTCA

Quando APTCA è presente in un assembly totalmente attendibile e un tipo nell'assembly eredita da un tipo che non consente chiamanti parzialmente attendibili, è possibile che si verifichi una violazione della sicurezza.

CA2118

CA2118: Verificare la sintassi di SuppressUnmanagedCodeSecurityAttribute

SuppressUnmanagedCodeSecurityAttribute consente di modificare il comportamento del sistema di sicurezza predefinito per i membri che eseguono codice non gestito mediante interoperabilità COM o chiamata al sistema operativo. Questo attributo viene principalmente utilizzato per aumentare le prestazioni. L'aumento delle prestazioni, tuttavia, comporta notevoli rischi in termini di sicurezza.

CA2119

CA2119: Impostare come sealed i metodi che soddisfano interfacce private

Un tipo pubblico ereditabile fornisce un'implementazione di metodo sottoponibile a override di un'interfaccia interna (Friend in Visual Basic). Per correggere una violazione di questa regola, impedire che venga eseguito l'override del metodo esternamente all'assembly.

CA2120

CA2120: Proteggere i costruttori di serializzazione

Questo tipo dispone di un costruttore che accetta un oggetto System.Runtime.Serialization.SerializationInfo e un oggetto System.Runtime.Serialization.StreamingContext (la firma del costruttore di serializzazione). Questo costruttore non è protetto da un controllo di sicurezza, ma uno o più costruttori regolari nel tipo sono protetti.

CA2121

CA2121: I costruttori statici devono essere privati

Il costruttore statico viene chiamato prima che venga creata la prima istanza del tipo o venga fatto riferimento a qualsiasi membro statico. Se un costruttore statico non è privato, può essere chiamato da codice esterno al sistema. A seconda delle operazioni eseguite nel costruttore, questa situazione può causare comportamenti imprevisti.

CA2122

CA2122: Non esporre in modo indiretto metodi con richieste di collegamento

Un membro pubblico o protetto presenta richieste di collegamento e viene chiamato da un membro che non esegue alcun controllo della sicurezza. Una richiesta di collegamento controlla esclusivamente le autorizzazioni del chiamante immediato.

CA2123

CA2123: Le richieste di collegamento negli verrine devono essere identiche a quelle nei metodi di base

Questa regola associa un metodo al relativo metodo di base che può essere un'interfaccia o un metodo virtuale in un altro tipo, quindi confronta le richieste di collegamento in ognuno. Se questa regola viene violata, un chiamante malintenzionato può ignorare la richiesta di collegamento chiamando semplicemente il metodo non sicuro.

CA2124

CA2124: Eseguire il wrapping delle clausole finally vulnerabili in un try esterno

Un metodo pubblico o protetto contiene un blocco try/finally. Il blocco finally dovrebbe reimpostare lo stato di sicurezza e non è incluso in un altro blocco finally.

CA2126

CA2126: Per le richieste di collegamento dei tipi sono necessarie richieste di ereditarietà

Un tipo non sealed pubblico è protetto utilizzando una richiesta di collegamento e dispone di un metodo sottoponibile a override. Né il tipo né il metodo sono protetti mediante una richiesta di ereditarietà.

CA2127

CA2136: I membri non devono avere annotazioni di trasparenza in conflitto

In un assembly trasparente al 100% non è possibile riscontrare codice critico. Questa regola verifica l'eventuale presenza di annotazioni SecurityCritical a livello di tipo, di campo e di metodo all'interno di assembly trasparenti al 100%.

CA2128

CA2147: Il codice Transparent non può utilizzare asserzioni di sicurezza

Questa regola analizza tutti i metodi e i tipi in un assembly trasparente al 100% o trasparente/critico e contrassegna l'utilizzo dichiarativo o imperativo di Assert.

CA2129

CA2140: Il codice Transparent non deve far riferimento a elementi SecurityCritical

I metodi contrassegnati con SecurityTransparentAttribute chiamano membri non pubblici, a loro volta contrassegnati con SecurityCritical. Questa regola analizza tutti i metodi e i tipi in un assembly trasparente/critico e contrassegna qualsiasi chiamata da codice trasparente a codice critico non pubblico non contrassegnato con SecurityTreatAsSafe.

CA2130

CA2130: Le costanti SecurityCritical devono essere Transparent

L'imposizione della trasparenza non viene applicata ai valori costanti perché i compilatori rendono inline valori costanti in modo che non sia richiesta alcuna ricerca in fase di esecuzione. I campi costanti devono essere trasparenti per la sicurezza in modo che i revisori del codice non suppongano che il codice trasparente non possa accedere alla costante.

CA2131

CA2131: I tipi SecurityCritical possono non partecipare all'equivalenza del tipo

Un tipo partecipa all'equivalenza del tipo e il tipo stesso o un membro o un campo del tipo è contrassegnato utilizzando l'attributo SecurityCriticalAttribute. Questa regola viene applicata a qualsiasi tipo critico o a tipi che contengono metodi o campi critici che partecipano all'equivalenza del tipo. Quando CLR rileva tale tipo, non lo carica con TypeLoadException in fase di esecuzione. In genere, questa regola viene generata solo quando gli utenti implementano l'equivalenza del tipo manualmente, anziché utilizzare tlbimp e i compilatori per eseguire l'equivalenza del tipo.

CA2132

CA2132: I costruttori predefiniti devono essere Critical almeno come i costruttori predefiniti del tipo base

I tipi e i membri che presentano SecurityCriticalAttribute non possono essere utilizzati dal codice dell'applicazione Silverlight. I tipi e i membri critici per la sicurezza possono essere utilizzati 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.

CA2133

CA2133: Delegati devono essere associati ai metodi con trasparenza consistente

Questo avviso è generato su un metodo che associa un delegato contrassegnato tramite SecurityCriticalAttribute a un metodo trasparente o contrassegnato tramite SecuritySafeCriticalAttribute. L'avviso viene generato anche su un metodo che associa un delegato trasparente o critico per la sicurezza a un metodo critico.

CA2134

CA2134: I metodi devono conservare trasparenza consistente durante l'override dei metodi base

Questa regola è generata quando un metodo contrassegnato tramite SecurityCriticalAttribute esegue l'override di un metodo trasparente o contrassegnato tramite SecuritySafeCriticalAttribute. Viene inoltre generata quando un metodo trasparente o contrassegnato tramite SecuritySafeCriticalAttribute esegue l'override di un metodo contrassegnato tramite SecurityCriticalAttribute. La regola è applicata in caso di esecuzione dell'override di un metodo virtuale o di implementazione di un'interfaccia.

CA2135

CA2135: Gli assembly di livello 2 non devono contenere LinkDemands

I LinkDemand sono deprecati nel set di regole per la sicurezza di livello 2. Anziché utilizzare i LinkDemand per applicare la sicurezza nella compilazione JIT, contrassegnare i metodi, i tipi e campi utilizzando l'attributo SecurityCriticalAttribute.

CA2136

CA2136: I membri non devono avere annotazioni di trasparenza in conflitto

Gli attributi di trasparenza vengono applicati da elementi di codice con un ambito più ampio a elementi con ambito più ridotto. Gli attributi di trasparenza di elementi di codice che presentano un ambito più ampio hanno la precedenza su quelli contenuti nel primo elemento. Ad esempio, una classe contrassegnata tramite l'attributo SecurityCriticalAttribute non può contenere un metodo contrassegnato tramite l'attributo SecuritySafeCriticalAttribute.

CA2137

CA2137: I metodi Transparent devono contenere solo IL verificabile

Un metodo contiene codice non verificabile o restituisce un tipo tramite riferimento. Questa regola viene generata nei tentativi tramite codice trasparente per la sicurezza per eseguire MISL (Microsoft Intermediate Language) non verificabile. Tuttavia, la regola non contiene un verificatore di IL completo, ma utilizza invece regole euristiche per intercettare la maggior parte delle violazioni di verifica MSIL.

CA2138

CA2138: I metodi Transparent non devono chiamare i metodi con l'attributo SuppressUnmanagedCodeSecurity

Un metodo trasparente per la sicurezza chiama un metodo contrassegnato tramite l'attributo SuppressUnmanagedCodeSecurityAttribute.

CA2139

CA2139: I metodi Transparent non possono utilizzare l'attributo HandleProcessCorruptingExceptions

Questa regola è generata da qualsiasi metodo trasparente che tenti di gestire un'eccezione che danneggia il processo tramite l'attributo HandleProcessCorruptedStateExceptionsAttribute. Un'eccezione che danneggia il processo è una classificazione di eccezione CLR versione 4.0, ad esempio AccessViolationException. L'attributo HandleProcessCorruptedStateExceptionsAttribute può essere utilizzato solo dai metodi SecurityCritical e sarà ignorato se applicato a un metodo trasparente.

CA2140

CA2140: Il codice Transparent non deve far riferimento a elementi SecurityCritical

Un elemento di codice contrassegnato tramite l'attributo SecurityCriticalAttribute è SecurityCritical. Un metodo trasparente non può utilizzare un elemento critico per la sicurezza. Se un tipo trasparente tenta di utilizzare un tipo SecurityCritical viene generata un eccezione TypeAccessException, MethodAccessException o FieldAccessException.

CA2141

CA2141:I metodi Transparent non devono soddisfare i LinkDemand

Un metodo trasparente per la sicurezza chiama un metodo in un assembly che non è contrassegnato tramite APTCA oppure un metodo trasparente per la sicurezza soddisfa un LinkDemand per un tipo o un metodo.

CA2142

CA2142: Il codice Transparent non deve essere protetto con LinkDemand

Questa regola funziona in metodi trasparenti che richiedono l'accesso da parte dei LinkDemand. Il codice trasparente per la sicurezza non deve essere responsabile della verifica della sicurezza di un'operazione, pertanto non deve richiedere autorizzazioni.

CA2143

CA2143: I metodi Transparent non devono utilizzare SecurityDemand

Il codice trasparente per la sicurezza non deve essere responsabile della verifica della sicurezza di un'operazione, pertanto non deve richiedere autorizzazioni. Il codice trasparente per la sicurezza deve utilizzare richieste complete per prendere decisioni relative alla sicurezza e il codice critico per la sicurezza non deve basarsi sul codice trasparente per l'esecuzione della richiesta completa.

CA2144

CA2144: Il codice Transparent non deve caricare assembly da matrici di byte

La revisione di sicurezza per il codice trasparente non è completa come la revisione di sicurezza per il codice critico, perché il primo non può eseguire azioni sensibili per la sicurezza. Assembly caricati da una matrice di byte potrebbero non essere notati nel codice trasparente e tale matrice di byte potrebbe contenere codice critico o, ancora più importante, codice critico per la sicurezza che è necessario controllare.

CA2145

CA2145: I metodi Transparent non devono includere SuppressUnmanagedCodeSecurityAttribute

I metodi decorati mediante l'attributo SuppressUnmanagedCodeSecurityAttribute presentano un LinkDemand implicito su ogni metodo che lo chiama. Questo LinkDemand richiede che il codice che effettua la chiamata sia critico per la sicurezza. Contrassegnare il metodo che utilizza SuppressUnmanagedCodeSecurity mediante l'attributo SecurityCriticalAttribute rende più ovvio questo requisito per i chiamanti del metodo.

CA2146

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

Questa regola viene generata quando un tipo derivato dispone di un attributo di trasparenza di sicurezza che non è critico come il relativo tipo di base o la relativa 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.

CA2147

CA2147: Il codice Transparent non può utilizzare asserzioni di sicurezza

Al codice contrassegnato come SecurityTransparentAttribute non sono concesse autorizzazioni sufficienti per l'asserzione.

CA2149

CA2149: I metodi Transparent non devono effettuare chiamate nel codice nativo

Questa regola viene generata in qualsiasi metodo trasparente che chiama direttamente nel codice nativo (ad esempio, tramite P/Invoke). Le violazioni di questa regola conducono a MethodAccessException nel modello di trasparenza di livello 2 e ad una richiesta completa per UnmanagedCode nel modello di trasparenza di livello 1.

CA2200

CA2200: Eseguire il rethrow per conservare i dettagli dello stack

Viene generata di nuovo un'eccezione, specificata in modo esplicito nell'istruzione throw. Se un'eccezione viene generata di nuovo tramite la specifica nell'istruzione throw, l'elenco di chiamate ai metodi tra il metodo originale che ha generato l'eccezione e il metodo corrente viene perso.

CA2201

CA2201: Non generare tipi di eccezione riservati

Tale circostanza complica il rilevamento e il debug dell'errore originale.

CA2202

CA2202: Non eliminare oggetti più volte

Un'implementazione di metodo contiene percorsi del codice che potrebbero comportare più chiamate a System.IDisposable.Dispose o a un equivalente di Dispose (ad esempio un metodo Close() per alcuni tipi) sullo stesso oggetto.

CA2204

CA2204: I valori letterali devono essere digitati in modo corretto

Una stringa letterale in un corpo del metodo contiene una o più parole che non sono riconosciute dalla libreria del correttore ortografico Microsoft.

CA2205

CA2205: Utilizzare equivalenti gestiti dell'API Win32

Viene definito un metodo di chiamata del sistema operativo e un metodo che dispone della funzionalità equivalente si trova nella libreria di classi .NET Framework.

CA2207

CA2207: Inizializzare i campi statici dei tipi di valore inline

Un tipo di valore dichiara un costruttore statico esplicito. Per correggere una violazione di questa regola, inizializzare tutti i dati statici quando vengono dichiarati e rimuovere il costruttore statico.

CA2208

CA2208: Creare istanze di eccezioni di argomento correttamente

Viene effettuata una chiamata al costruttore predefinito (senza parametri) di un tipo di eccezione che corrisponde a o deriva da ArgumentException oppure viene passato un argomento stringa non corretto a un costruttore con parametri di un tipo di eccezione che corrisponde a o deriva da ArgumentException.

CA2210

CA2210: Gli assembly devono avere nomi sicuri validi

Il nome sicuro protegge i client dal caricamento involontario di un assembly alterato. Gli assembly con nomi sicuri non devono essere distribuiti al di fuori di scenari molto limitati. Se si condividono o distribuiscono assembly non firmati correttamente, l'assembly può essere alterato, non essere caricato in Common Language Runtime oppure l'utente potrebbe avere la necessità di disabilitare la verifica nel proprio computer.

CA2211

CA2211: I campi non costanti non devono essere visibili

I campi statici che non sono costanti né in sola lettura non sono thread-safe. L'accesso a tali campi deve essere controllato attentamente e richiede tecniche di programmazione avanzate per la sincronizzazione dell'accesso all'oggetto classe.

CA2212

CA2212: Non contrassegnare componenti serviti con WebMethod

Un metodo in un tipo che eredita da System.EnterpriseServices.ServicedComponent è contrassegnato utilizzando System.Web.Services.WebMethodAttribute. Poiché WebMethodAttribute e un metodo ServicedComponent presentano comportamenti e requisiti di contesto e flusso di transazioni in conflitto tra loro, il comportamento del metodo non sarà corretto in determinati scenari.

CA2213

CA2213: I campi Disposable devono essere eliminati

Un tipo che implementa System.IDisposable dichiara i campi di tipi che implementano anch'essi IDisposable. Il metodo Dispose del campo non viene chiamato dal metodo Dispose del tipo dichiarante.

CA2214

CA2214: Non chiamare metodi sottoponibili a override nei costruttori

Quando un costruttore chiama un metodo virtuale, è possibile che il costruttore per l'istanza che richiama il metodo non sia stato eseguito.

CA2215

CA2215: I metodi Dispose devono chiamare il metodo Dispose della classe base

Se un tipo eredita da un tipo eliminabile, deve chiamare il metodo Dispose del tipo di base dal proprio metodo Dispose.

CA2216

CA2216: I tipi Disposable devono dichiarare un finalizzatore

Un tipo che implementa System.IDisposable e include campi che suggeriscono l'utilizzo di risorse non gestite non implementa un finalizzatore, come descritto da Object.Finalize.

CA2217

CA2217: Non contrassegnare le enumerazioni con FlagsAttribute

Un'enumerazione visibile esternamente è contrassegnata utilizzando FlagsAttribute e presenta uno o più valori che non sono potenze di due o una combinazione degli altri valori definiti nell'enumerazione.

CA2218

CA2218: Eseguire l'override di GetHashCode all'override di Equals

GetHashCode restituisce un valore, basato sull'istanza corrente, appropriato per algoritmi di hash e strutture dei dati come una tabella hash. Due oggetti dello stesso tipo e uguali devono restituire lo stesso codice hash.

CA2219

CA2219: Non generare eccezioni in clausole di eccezione

Quando un'eccezione viene generata in una clausola finally o in una clausola fault, la nuova eccezione nasconde l'eccezione attiva. Quando un'eccezione viene generata in una clausola filter, il runtime rileva l'eccezione automaticamente. Tale circostanza complica il rilevamento e il debug dell'errore originale.

CA2220

CA2220: I finalizzatori devono chiamare il finalizzatore della classe base

La finalizzazione deve essere propagata tramite la gerarchia di ereditarietà. A tale scopo, i tipi devono chiamare il metodo Finalize della classe di base nel proprio metodo Finalize.

CA2221

CA2221: I finalizzatori devono essere protetti

I finalizzatori devono utilizzare il modificatore di accesso a livello di famiglia.

CA2222

CA2222: Non diminuire la visibilità di membri ereditati

Non modificare il modificatore di accesso per i membri ereditati. La modifica in privato di un membro ereditato non impedisce ai chiamanti di accedere all'implementazione della classe base del metodo.

CA2223

CA2223: La differenza tra membri non deve limitarsi al tipo restituito

Nonostante Common Language Runtime consenta l'utilizzo di tipi restituiti per differenziare membri altrimenti identici, questa funzionalità non è inclusa nella specifica CLS (Common Language Specification) e non è una funzionalità comune dei linguaggi di programmazione .NET.

CA2224

CA2224: Eseguire l'override di Equals all'override dell'operatore

Un tipo pubblico implementa l'operatore di uguaglianza, ma non esegue l'override di Object.Equals.

CA2225

CA2225: Gli overload degli operatori hanno alternative con nome

È stato rilevato un overload di operatore e il metodo alternativo denominato previsto non è stato trovato. Il membro alternativo denominato fornisce accesso alla stessa funzionalità dell'operatore e viene fornito per gli sviluppatori che programmano in linguaggi che non supportano operatori di overload.

CA2226

CA2226: Gli operatori devono avere overload simmetrici

Un tipo implementa l'operatore di uguaglianza o di disuguaglianza e non implementa l'operatore opposto.

CA2227

CA2227: Le proprietà di insiemi devono essere in sola lettura

Una proprietà di insieme scrivibile consente a un utente di sostituire l'insieme con un insieme diverso. Una proprietà di sola lettura interrompe la sostituzione dell'insieme ma consente ancora l'impostazione dei singoli membri.

CA2228

CA2228: Non fornire formati di risorse non rilasciati

I file di risorse compilati utilizzando versioni preliminari di .NET Framework potrebbero non essere utilizzabili dalle versioni supportate di .NET Framework.

CA2229

CA2229: Implementare costruttori di serializzazione

Per correggere una violazione di questa regola, implementare il costruttore di serializzazione. Per una classe sealed, rendere il costruttore privato; in caso contrario renderlo protetto.

CA2230

CA2230: Utilizzare params per argomenti variabili

Un tipo pubblico o protetto contiene un metodo pubblico o protetto che utilizza la convenzione di chiamata VarArgs anziché la parola chiave params.

CA2231

CA2231: Eseguire l'overload dell'operatore "uguale a" all'override di ValueType.Equals

Un tipo di valore esegue l'override di Object.Equals, ma non implementa l'operatore di uguaglianza.

CA2232

CA2232: Contrassegnare i punti di ingresso del Windows Form con STAThread

STAThreadAttribute indica che il modello di threading COM per l'applicazione è un apartment a thread singolo. Questo attributo deve essere presente sul punto di ingresso di qualsiasi applicazione che utilizza Windows Form; se omesso è possibile che il componente Windows non funzioni correttamente.

CA2233

CA2233: Evitare l'overflow delle operazioni

Non eseguire operazioni aritmetiche senza prima convalidare gli operandi. In questo modo si verifica che il risultato dell'operazione non sia esterno all'intervallo di valori possibili per i tipi di dati coinvolti.

CA2234

CA2234: Passare oggetti System.Uri invece di stringhe

Viene effettuata una chiamata a un metodo che dispone di un parametro di stringa il cui nome contiene "uri", "URI", "urn", "URN", "url" o "URL". Il tipo dichiarante del metodo contiene un overload del metodo corrispondente con un parametro System.Uri.

CA2235

CA2235: Contrassegnare tutti i campi non serializzabili

Un campo di istanza di un tipo non serializzabile viene dichiarato in un tipo serializzabile.

CA2236

CA2236: Chiamare metodi della classe base su tipi ISerializable

Per correggere una violazione di questa regola, chiamare il costruttore di serializzazione o il metodo GetObjectData del tipo di base dal costruttore o dal metodo del tipo derivato corrispondente.

CA2237

CA2237: Contrassegnare i tipi ISerializable con SerializableAttribute

Affinché i tipi vengano riconosciuti come serializzabili in Common Language Runtime, è necessario che siano contrassegnati utilizzando l'attributo SerializableAttribute anche quando utilizzano una routine di serializzazione personalizzata tramite l'implementazione dell'interfaccia ISerializable.

CA2238

CA2238: Implementare correttamente i metodi di serializzazione

Un metodo che gestisce un evento di serializzazione non dispone della visibilità, del tipo restituito o della firma corretta.

CA2239

CA2239: Fornire metodi di deserializzazione per i campi facoltativi

Un tipo include un campo contrassegnato utilizzando l'attributo System.Runtime.Serialization.OptionalFieldAttribute e non fornisce metodi di gestione degli eventi di deserializzazione.

CA2240

CA2240: Implementare ISerializable in modo corretto

Per correggere una violazione di questa regola, impostare il metodo GetObjectData come visibile e sottoponibile a override e accertarsi che tutti i campi di istanza siano inclusi nel processo di serializzazione o contrassegnati in modo esplicito utilizzando l'attributo NonSerializedAttribute.

CA2241

CA2241: Fornire argomenti corretti ai metodi di formattazione

L'argomento format passato a System.String.Format non contiene un elemento di formato corrispondente a ogni argomento dell'oggetto o viceversa.

CA2242

CA2242: Testare i valori NaN in modo corretto

Questa espressione consente di testare un valore rispetto a Single.Nan o Double.Nan. Utilizzare Single.IsNan(Single) o Double.IsNan(Double) per testare il valore.

CA2243

CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente

Il parametro del valore letterale stringa di un attributo non esegue l'analisi corretta di un URL, un GUID o una versione.