Partager via


Ensemble de règles de règles de vérification étendue pour le code managé

L'ensemble des Règles de vérification étendue Microsoft augmente le nombre d'erreurs d'utilisation d'infrastructure et de logique signalées via l'analyse du code.L'accentuation supplémentaire est placée sur les scénarios spécifiques tels que l'interopérabilité COM et les applications mobiles.Vous devriez envisager d'ajouter cet ensemble de règles si l'un de ces scénarios s'applique à votre projet ou pour trouver d'autres problèmes dans votre projet.

L'ensemble des Règles de vérification étendue Microsoft inclut les règles qui figurent dans les Règles de vérification de base Microsoft.L'ensemble des Règles de vérification de base Microsoft inclut les règles qui figurent dans les Règles Microsoft minimales recommandées.Pour plus d'informations, consultez Ensemble de règles de règles de vérification de base pour le code managé et Ensemble de règles des règles recommandées managées pour le code managé.

Le tableau suivant décrit toutes les règles qui figurent dans l'ensemble des Règles de vérification étendue Microsoft.

Règle

Description

CA1001

Les types qui possèdent des champs supprimables doivent être supprimables

CA1009

Déclarer les gestionnaires d'événements correctement

CA1016

Marquer les assemblies avec AssemblyVersionAttribute

CA1033

Les méthodes d'interface doivent pouvoir être appelées par les types enfants

CA1049

Les types qui possèdent des ressources natives doivent être supprimables

CA1060

Déplacer les P/Invoke vers une classe NativeMethods

CA1061

Ne pas masquer les méthodes de la classe de base

CA1063

Implémenter IDisposable correctement

CA1065

Ne pas lever d'exceptions dans des emplacements inattendus

CA1301

Éviter les accélérateurs en double

CA1400

Des points d'entrée P/Invoke doivent exister

CA1401

Les P/Invoke ne doivent pas être visibles

CA1403

Les types auto structurant ne doivent pas être visibles par COM

CA1404

Appeler GetLastError immédiatement après P/Invoke

CA1405

Les types de base de type visibles par COM doivent être visibles par COM

CA1410

Les méthodes d'inscription COM doivent être correspondre

CA1415

Déclarer correctement les méthodes P/Invoke

CA1821

Supprimer les finaliseurs vides

CA1900

Les champs de type valeur doivent être portables

CA1901

Les déclarations P/Invoke doivent être portables

CA2002

Ne définissez pas un verrou sur des objets à identité faible

CA2100

CA2100 : Rechercher des failles de sécurité dans des requêtes SQL

CA2101

Spécifiez le marshaling pour les arguments de chaîne P/Invoke

CA2108

Vérifiez la sécurité déclarative dans les types valeur

CA2111

Les pointeurs ne doivent pas être visibles

CA2112

Les types sécurisés ne doivent pas exposer de champs

CA2114

La sécurité de la méthode doit être un sur-ensemble du type

CA2116

Les méthodes APTCA doivent uniquement appeler des méthodes APTCA

CA2117

Les types APTCA doivent uniquement étendre des types de base APTCA

CA2122

N'exposez pas indirectement des méthodes avec des demandes de liaison

CA2123

Les demandes de liaison de surcharge doivent être identiques au composant de base

CA2124

Incluez dans un wrapper les clauses finally vulnérables dans un bloc try externe

CA2126

Les demandes de liaison de types nécessitent des demandes d'héritage

CA2131

Les types critiques de sécurité ne peuvent pas participer à l'équivalence des types

CA2132

Les constructeurs par défaut doivent être au moins aussi critiques que les constructeurs par défaut de type de base

CA2133

Les délégués doivent lier les méthodes avec une transparence cohérente

CA2134

Les méthodes doivent garder une transparence consistente lors de la surcharge de méthodes de base

CA2137

Les méthodes transparentes doivent contenir uniquement des IL vérifiables

CA2138

Les méthodes transparentes ne doivent pas appeler les méthodes ayant l'attribut SuppressUnmanagedCodeSecurity

CA2140

Le code transparent ne doit pas faire référence à des éléments critiques de sécurité

CA2141

Les méthodes transparentes ne répondent pas aux LinkDemands

CA2146

Les types doivent être au moins aussi critiques que les types de base et les interfaces

CA2147

Les méthodes transparentes ne peuvent pas utiliser d'assertions de sécurité

CA2149

Les méthodes transparentes ne doivent pas appeler du code natif

CA2200

Levez à nouveau une exception pour conserver les détails de la pile

CA2202

Ne pas supprimer des objets plusieurs fois

CA2207

Initialisez les champs statiques des types valeur sur une ligne

CA2212

Ne marquez pas les composants pris en charge avec WebMethod

CA2213

Les champs pouvant être supprimés doivent l'être

CA2214

N'appelez pas de méthodes substituables dans les constructeurs

CA2216

Les types pouvant être supprimés doivent déclarer un finaliseur

CA2220

Les finaliseurs doivent appeler le finaliseur de leur classe de base

CA2229

Implémentez des constructeurs de sérialisation

CA2231

Surcharger l'opérateur égal (equals) en remplaçant ValueType.Equals

CA2232

Marquez les points d'entrée Windows Forms avec STAThread

CA2235

Marquez tous les champs non sérialisés

CA2236

Appelez les méthodes de la classe de base sur les types ISerializable

CA2237

Marquer les types ISerializable avec SerializableAttribute

CA2238

Implémentez les méthodes de sérialisation comme il se doit

CA2240

Implémentez correctement ISerializable

CA2241

Fournissez des arguments corrects aux méthodes de mise en forme

CA2242

Effectuez correctement des tests NaN

CA1008

Les enums doivent avoir la valeur zéro

CA1013

Surchargez l'opérateur égal lors de la surcharge de l'opérateur d'addition et de soustraction

CA1303

Ne pas transmettre des littéraux en tant que paramètres localisés

CA1308

Normaliser les chaînes en majuscules

CA1806

Ne pas ignorer les résultats de méthode

CA1816

Appeler GC.SuppressFinalize correctement

CA1819

Les propriétés ne doivent pas retourner des tableaux

CA1820

Vérifiez la présence de chaînes vides en utilisant la longueur de chaîne

CA1903

Utiliser uniquement l'API à partir du Framework cible

CA2004

Supprimez les appels à GC.KeepAlive

CA2006

Utilisez SafeHandle pour encapsuler les ressources natives

CA2102

Interceptez les exceptions non CLSCompliant dans les gestionnaires généraux

CA2104

Ne déclarez pas les types référence mutables en lecture seule

CA2105

Les champs de tableau ne doivent pas être en lecture seule

CA2106

Assertions sécurisées

CA2115

Appelez GC.KeepAlive lorsque vous utilisez des ressources natives

CA2119

Scellez les méthodes qui satisfont les interfaces privées

CA2120

Sécurisez les constructeurs de sérialisation

CA2121

Les constructeurs statiques doivent être privés

CA2130

Les constantes critiques de sécurité doivent être transparentes

CA2205

Utilisez des équivalents managés de l'API Win32

CA2215

Les méthodes Dispose doivent appeler la fonction Dispose de la classe de base

CA2221

Les finaliseurs doivent être protégés

CA2222

Ne réduisez pas la visibilité des membres hérités

CA2223

Les membres ne doivent pas différer uniquement par leur type de retour

CA2224

Remplacez Equals au moment de surcharger l'opérateur égal

CA2226

Les opérateurs doivent contenir des surcharges symétriques

CA2227

Les propriétés de collection doivent être en lecture seule

CA2239

Spécifiez des méthodes de désérialisation pour les champs facultatifs

CA1032

Implémenter des constructeurs d'exception standard

CA1054

Les paramètres Uri ne doivent pas être des chaînes

CA1055

Les valeurs de retour Uri ne doivent pas être des chaînes

CA1056

Les propriétés Uri ne doivent pas être des chaînes

CA1057

Les surcharges d'uri de chaîne appellent les surcharges de System.Uri

CA1402

Éviter les surcharges dans les interfaces COM visibles

CA1406

Éviter les arguments Int64 pour les clients Visual Basic 6

CA1407

Éviter les membres statiques dans les types visibles par COM

CA1408

Ne pas utiliser le paramètre AutoDual ClassInterfaceType

CA1409

Les types visibles par COM doivent pouvoir être créés

CA1411

Les méthodes d'inscription COM ne doivent pas être visibles

CA1412

Marquer les interfaces ComSource comme IDispatch

CA1413

Éviter les champs non publics dans les types valeur visibles par COM

CA1414

Marquer les arguments booléens P/Invoke comme MarshalAs

CA1600

Ne pas utiliser de priorité de processus inactif

CA1601

Ne pas utiliser de minuteries qui empêchent les changements d'état de l'alimentation

CA1824

Marquer les assemblies avec NeutralResourcesLanguageAttribute

CA2001

Évitez d'appeler des méthodes susceptibles de poser des problèmes

CA2003

Ne traitez pas les fibres comme des threads

CA2135

Les assemblies de niveau 2 ne doivent pas contenir de LinkDemands

CA2136

Les membres ne doivent pas avoir d'annotations de transparence conflictuelles

CA2139

Les méthodes transparentes ne peuvent pas utiliser l'attribut HandleProcessCorruptingExceptions

CA2142

Le code transparent ne doit pas être protégé avec des LinkDemands

CA2143

Les méthodes transparentes ne doivent pas utiliser de demandes de sécurité

CA2144

Le code transparent ne doit pas charger d'assemblies depuis des tableaux d'octets

CA2145

Les méthodes transparentes ne doivent pas être décorées avec SuppressUnmanagedCodeSecurityAttribute

CA2204

Les littéraux doivent être correctement orthographiés

CA2211

Les champs non constants ne doivent pas être visibles

CA2217

Ne pas marquer les enums avec FlagsAttribute

CA2218

Surchargez GetHashCode au moment de surcharger Equals

CA2219

Ne pas lever d'exceptions dans les clauses d'exception

CA2225

Les surcharges d'opérateur offrent d'autres méthodes nommées

CA2228

Ne distribuez pas des formats de ressources non commercialisés

CA2230

Utilisez le mot clé params pour les arguments de variables

CA2233

Les opérations ne doivent pas déborder

CA2234

Passez des objets System.Uri à la place de chaînes

CA2243

Les littéraux de chaîne d'attribut doivent être correctement analysés