Condividi tramite


Set di regole estese di correttezza per codice gestito

Il set di regole estese di correttezza Microsoft aumenta il numero di errori di utilizzo del framework e di logica segnalati dall'analisi del codice.Viene posta particolare attenzione su scenari specifici, ad esempio l'interoperabilità COM e le applicazioni mobili.Considerare la possibilità di includere questo set di regole se uno di questi scenari è applicabile al proprio progetto o per rilevare problemi aggiuntivi nel progetto.

Il set di regole estese di correttezza Microsoft include le regole contenute nel set di regole di correttezza di base Microsoft.Il set di regole di base di correttezza Microsoft include le regole contenute nel set di regole minime consigliate Microsoft.Per ulteriori informazioni, vedere Set di regole base di correttezza per codice gestito e Set di regole consigliate gestite per codice gestito

Nella tabella seguente vengono descritte tutte le regole del set di regole estese di correttezza Microsoft.

Regola

Descrizione

CA1001

I tipi proprietari di campi Disposable devono essere Disposable

CA1009

Dichiarare correttamente i gestori eventi

CA1016

Contrassegnare gli assembly con AssemblyVersionAttribute

CA1033

I metodi di interfaccia devono essere richiamabili dai tipi figlio

CA1049

I tipi delle risorse native devono essere Disposable

CA1060

Spostare i P/Invoke nella classe NativeMethods

CA1061

Non nascondere i metodi di una classe base

CA1063

Implementare IDisposable correttamente

CA1065

Non generare eccezioni in posizioni non previste

CA1301

Evitare tasti di scelta rapida duplicati

CA1400

I punti di ingresso P/Invoke devono esistere

CA1401

I P/Invoke non devono essere visibili

CA1403

I tipi layout automatici non devono essere visibili a COM

CA1404

Chiamare GetLastError immediatamente dopo P/Invoke

CA1405

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

CA1410

I metodi di registrazione COM devono corrispondere

CA1415

Dichiarare correttamente i P/Invoke

CA1821

Rimuovere i finalizzatori vuoti

CA1900

I campi dei tipi di valore devono essere portabili

CA1901

Le dichiarazioni P/Invoke devono essere portabili

CA2002

Non bloccare oggetti con identità debole

CA2100

Controllare l'eventuale vulnerabilità di sicurezza delle query SQL

CA2101

Specificare il marshalling per gli argomenti di stringa P/Invoke

CA2108

Controllare la sicurezza dichiarativa sui tipi di valori

CA2111

I puntatori non devono essere visibili

CA2112

I tipi protetti non devono esporre campi

CA2114

La sicurezza del metodo deve essere un superset del tipo

CA2116

I metodi APTCA devono chiamare solo metodi APTCA

CA2117

I tipi APTCA devono estendere solo tipi di base APTCA

CA2122

Non esporre in modo indiretto metodi con richieste di collegamento

CA2123

Le richieste di collegamento negli override devono essere identiche a quelle nei metodi di base

CA2124

Eseguire il wrapping delle clausole finally vulnerabili in un try esterno

CA2126

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

CA2131

I tipi SecurityCritical non possono partecipare all'equivalenza del tipo

CA2132

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

CA2133

Delegati devono essere associati ai metodi con trasparenza consistente

CA2134

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

CA2137

I metodi Transparent devono contenere solo IL verificabile

CA2138

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

CA2140

Il codice Transparent non deve far riferimento a elementi SecurityCritical

CA2141

I metodi Transparent non devono soddisfare i LinkDemand

CA2146

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

CA2147

I metodi Transparent non possono utilizzare asserzioni di sicurezza

CA2149

I metodi Transparent non devono effettuare chiamate nel codice nativo

CA2200

Eseguire il rethrow per conservare i dettagli dello stack

CA2202

Non eliminare oggetti più volte

CA2207

Inizializzare i campi statici dei tipi di valore inline

CA2212

Non contrassegnare componenti serviti con WebMethod

CA2213

I campi Disposable devono essere eliminati

CA2214

Non chiamare metodi sottoponibili a override nei costruttori

CA2216

I tipi Disposable devono dichiarare un finalizzatore

CA2220

I finalizzatori devono chiamare il finalizzatore della classe base

CA2229

Implementare costruttori di serializzazione

CA2231

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

CA2232

Contrassegnare i punti di ingresso del Windows Form con STAThread

CA2235

Contrassegnare tutti i campi non serializzabili

CA2236

Chiamare metodi della classe base su tipi ISerializable

CA2237

Contrassegnare i tipi ISerializable con SerializableAttribute

CA2238

Implementare correttamente i metodi di serializzazione

CA2240

Implementare ISerializable in modo corretto

CA2241

Fornire argomenti corretti ai metodi di formattazione

CA2242

Testare i valori NaN in modo corretto

CA1008

Gli enum devono avere valore zero

CA1013

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

CA1303

Non passare valori letterali come parametri localizzati

CA1308

Normalizzare le stringhe in lettere maiuscole

CA1806

Non ignorare i risultati dei metodi

CA1816

Chiamare GC.SuppressFinalize correttamente

CA1819

Le proprietà non devono restituire matrici

CA1820

Testare le stringhe vuote utilizzando la lunghezza di stringa

CA1903

Utilizzare solo API della versione di .NET Framework di destinazione

CA2004

Rimuovere le chiamate a GC.KeepAlive

CA2006

Utilizzare SafeHandle per incapsulare le risorse native

CA2102

Individuare le eccezioni non CLSCompliant nei gestori generali

CA2104

Non dichiarare tipi di riferimento modificabili in sola lettura

CA2105

I campi di matrici non devono essere in sola lettura

CA2106

Asserzioni protette

CA2115

Chiamare GC.KeepAlive durante l'utilizzo di risorse native

CA2119

Impostare come sealed i metodi che soddisfano interfacce private

CA2120

Proteggere i costruttori di serializzazione

CA2121

I costruttori statici devono essere privati

CA2130

Le costanti SecurityCritical devono essere Transparent

CA2205

Utilizzare equivalenti gestiti dell'API Win32

CA2215

I metodi Dispose devono chiamare il metodo Dispose della classe base

CA2221

I finalizzatori devono essere protetti

CA2222

Non diminuire la visibilità di membri ereditati

CA2223

La differenza tra membri non deve limitarsi al tipo restituito

CA2224

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

CA2226

Gli operatori devono avere overload simmetrici

CA2227

Le proprietà di raccolta devono essere in sola lettura

CA2239

Fornire metodi di deserializzazione per i campi facoltativi

CA1032

Implementare costruttori di eccezioni standard

CA1054

I parametri URI non devono essere stringhe

CA1055

I valori restituiti URI non devono essere stringhe

CA1056

Le proprietà URI non devono essere stringhe

CA1057

Gli overload URI di stringhe chiamano gli overload System.Uri

CA1402

Evitare gli overload nelle interfacce visibili a COM

CA1406

Evitare gli argomenti Int64 per i client Visual Basic 6

CA1407

Evitare i membri statici nei tipi visibili a COM

CA1408

Non utilizzare AutoDual ClassInterfaceType

CA1409

I tipi visibili a COM devono essere creabili

CA1411

I metodi di registrazione COM non devono essere visibili

CA1412

Contrassegnare le interfacce ComSource come IDispatch

CA1413

Evitare i campi non pubblici nei tipi valore visibili a COM

CA1414

Contrassegnare gli argomenti P/Invoke booleani con MarshalAs

CA1600

Non impostare la priorità del processo su Inattivo

CA1601

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

CA1824

Contrassegnare gli assembly con NeutralResourcesLanguageAttribute

CA2001

Evitare le chiamate a metodi problematici

CA2003

Non considerare i fiber come i thread

CA2135

Gli assembly di livello 2 non devono contenere LinkDemands

CA2136

I membri non devono avere annotazioni di trasparenza in conflitto

CA2139

I metodi Transparent non possono utilizzare l'attributo HandleProcessCorruptingExceptions

CA2142

Il codice Transparent non deve essere protetto con LinkDemand

CA2143

I metodi Transparent non devono utilizzare SecurityDemand

CA2144

Il codice Transparent non deve caricare assembly da matrici di byte

CA2145

I metodi Transparent non devono includere SuppressUnmanagedCodeSecurityAttribute

CA2204

I valori letterali devono essere digitati in modo corretto

CA2211

I campi non costanti non devono essere visibili

CA2217

Non contrassegnare le enumerazioni con FlagsAttribute

CA2218

Eseguire l'override di GetHashCode all'override di Equals

CA2219

Non generare eccezioni in clausole di eccezione

CA2225

Gli overload degli operatori hanno alternative con nome

CA2228

Non fornire formati di risorse non rilasciati

CA2230

Utilizzare params per argomenti variabili

CA2233

Evitare l'overflow delle operazioni

CA2234

Passare oggetti System.Uri invece di stringhe

CA2243

Valori letterali stringa di attributo devono essere analizzate correttamente