Ensemble de règles d'analyse du code Règles de vérification de base Microsoft

L'ensemble des Règles de vérification de base Microsoft se concentre sur les erreurs de logique et erreurs courantes dans l'utilisation des API Framework. L'ensemble de Règles de vérification de base Microsoft inclut les règles figurant dans les Règles Microsoft minimales recommandées. Pour plus d'informations, consultez Ensemble de règles d'analyse du code Règles Microsoft minimales recommandées Vous devez inclure cet ensemble de règles pour développer la liste d'avertissements que les règles minimales recommandées signalent.

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

Règle

Description

CA1008 : Les enums doivent avoir la valeur zéro

La valeur par défaut d'une énumération non initialisée, comme d'autres types valeur, est zéro. Une énumération attribuée sans indicateur doit définir un membre de valeur zéro afin que la valeur par défaut soit une valeur valide de l'énumération. Si une énumération à laquelle l'attribut FlagsAttribute est appliqué définit un membre de valeur zéro, son nom doit être "None" pour indiquer qu'aucune valeur n'a été définie dans l'énumération.

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

Un type public ou protégé implémente les opérateurs d'addition ou de soustraction sans implémenter l'opérateur d'égalité.

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

Une méthode visible de l'extérieur passe un littéral de chaîne en tant que paramètre à un constructeur ou une méthode présent dans la bibliothèque de classes .NET Framework et cette chaîne doit être localisable.

CA1308 : Normaliser les chaînes en majuscules

Les chaînes doivent être normalisées en majuscules. Il existe un petit groupe de caractères qui, en cas de conversion en minuscules, ne peut pas faire un aller-retour.

CA1806 : Ne pas ignorer les résultats de méthode

Un nouvel objet est créé mais jamais utilisé, ou une méthode qui crée et retourne une nouvelle chaîne est appelée et la nouvelle chaîne n'est jamais utilisée, ou une méthode COM ou P/Invoke retourne un code HRESULT ou d'erreur qui n'est jamais utilisé.

CA1816 : Appeler GC.SuppressFinalize correctement

Une méthode qui est une implémentation de Dispose n'appelle pas GC.SuppressFinalize, ou une méthode qui n'est pas une implémentation de Dispose appelle GC.SuppressFinalize, ou une méthode appelle GC.SuppressFinalize et passe un élément autre que celui-ci (Me en Visual Basic).

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

Les tableaux retournés par les propriétés ne sont pas protégés en écriture, même si la propriété est en lecture seule. Pour protéger le tableau de toute falsification, la propriété doit retourner une copie du tableau. En général, les utilisateurs ne comprennent l'incidence négative en matière de performances de l'appel à une telle propriété.

CA1820 : Vérifiez la présence de chaînes vides par la longueur de chaîne

La comparaison de chaînes à l'aide de la propriété String.Length ou de la méthode String.IsNullOrEmpty est nettement plus rapide que l'utilisation d'Equals.

CA1903 : Utiliser uniquement l'API à partir du Framework cible

Un membre ou un type utilise un membre ou un type qui a été introduit dans un Service Pack qui ne figurait pas dans le Framework cible du projet.

CA2004 : Supprimez les appels à GC.KeepAlive

Si vous envisagez d'utiliser SafeHandle, supprimez tous les appels à GC.KeepAlive (objet). Dans ce cas, les classes ne requièrent pas d'appel à GC.KeepAlive, en supposant qu'elles ne disposent pas d'un finaliseur, mais dépendent de SafeHandle pour finaliser le handle du système d'exploitation à leur place.

CA2006 : Utilisez SafeHandle pour encapsuler les ressources natives

L'utilisation de IntPtr dans du code managé peut être le signe d'un problème potentiel de sécurité et de fiabilité. Toute utilisation de IntPtr doit être passée en revue pour déterminer s'il est nécessaire de recourir à un SafeHandle ou une technologie similaire à la place.

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

Un membre dans un assembly qui n'est pas marqué avec RuntimeCompatibilityAttribute ou qui est marqué avec RuntimeCompatibility(WrapNonExceptionThrows = false) contient un bloc catch qui gère System.Exception et ne contient pas de bloc catch général immédiatement après.

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

Un type visible de l'extérieur contient un champ en lecture seule visible de l'extérieur qui constitue un type référence mutable. Un type mutable est un type dont les données d'instance peuvent être modifiées.

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

Lorsque vous appliquez le modificateur en lecture seule (ReadOnly en Visual Basic) à un champ qui contient un tableau, ce champ ne peut pas être modifié pour référencer un tableau différent. Toutefois, les éléments du tableau stockés dans un champ en lecture seule peuvent être modifiés.

CA2106 : Assertions sécurisées

Une méthode déclare une autorisation et aucune vérification de sécurité n'est exécutée sur l'appelant. L'assertion d'une autorisation de sécurité effectuée sans vérification de sécurité peut rendre votre code vulnérable et facile à exploiter.

CA2115 : Appelez GC.KeepAlive lorsque vous utilisez des ressources natives

Cette règle détecte les erreurs susceptibles de se produire du fait qu'une ressource non managée est en cours de finalisation alors qu'elle est encore utilisée dans un code non managé.

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

Un type public pouvant être hérité fournit une implémentation de méthode substituable d'une interface interne (Friend en Visual Basic). Pour corriger une violation de cette règle, empêchez la méthode d'être substituée en dehors de l'assembly.

CA2120 : Sécurisez les constructeurs de sérialisation

Ce type possède un constructeur qui accepte un objet System.Runtime.Serialization.SerializationInfo et un objet System.Runtime.Serialization.StreamingContext (la signature du constructeur de sérialisation). Ce constructeur n'est pas sécurisé par une vérification de la sécurité, mais au moins un des constructeurs normaux dans le type est sécurisé.

CA2121 : Les constructeurs statiques doivent être privés

Le système appelle le constructeur statique avant la création de la première instance du type ou le référencement de tout membre statique. Si un constructeur statique n'est pas privé, il peut être appelé par un code autre que le système. Selon les opérations effectuées dans le constructeur, cette possibilité peut provoquer un comportement inattendu.

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

Une méthode d'appel de code est définie et une méthode dotée de la fonctionnalité équivalente existe dans la bibliothèque de classes .NET Framework.

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

Si un type hérite d'un type pouvant être supprimé, il doit appeler la méthode Dispose du type de base issu de sa propre méthode Dispose.

CA2221 : Les finaliseurs doivent être protégés

Les finaliseurs doivent utiliser le modificateur d'accès family.

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

Vous ne devez pas modifier le modificateur d'accès destiné aux membres hérités. La modification d'un membre hérité au profit d'un état privé n'empêche pas les appelants d'accéder à l'implémentation de classe de base de la méthode.

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

Bien que le Common Language Runtime autorise l'utilisation de types de retour pour différencier des membres autrement identiques, cette fonctionnalité ne figure pas dans la Common Language Specification, et n'est pas une fonctionnalité courante des langages de programmation .NET.

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

Un type public implémente l'opérateur d'égalité, mais ne se substitue pas à Object.Equals.

CA2226 : Les opérateurs doivent contenir des surcharges symétriques

Un type implémente l'opérateur d'égalité ou d'inégalité et n'implémente pas l'opérateur opposé.

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

Une propriété de collection accessible en écriture permet à un utilisateur de remplacer la collection par une collection différente. Une propriété en lecture seule empêche le remplacement de la collection, mais permet quand même aux membres individuels d'être définis.

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

Un type valeur se substitue à Object.Equals mais n'implémente pas l'opérateur d'égalité.

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

Un type présente un champ marqué avec l'attribut System.Runtime.Serialization.OptionalFieldAttribute et ne fournit aucune méthode de gestion des événements de désérialisation.