Partager via


Règles de fiabilité

Règles de fiabilité gérant la fiabilité des bibliothèques et des applications, notamment une utilisation adaptée des threads et de la mémoire. Les règles de fiabilité sont les suivantes :

Règle Description
CA2000 : Supprimer les objets avant la mise hors de portée Sachant qu'un événement exceptionnel peut se produire et empêcher l'exécution du finaliseur d'un objet, ce dernier doit plutôt être supprimé explicitement avant que toutes les références à lui soient hors de portée.
CA2002 : Ne définissez pas un verrou sur des objets à identité faible Un objet est dit d'identité faible lorsqu'il est accessible directement au-delà des limites d'un domaine d'application. Un thread qui essaie d'acquérir un verrou sur un objet qui affiche une identité faible peut être bloqué par un deuxième thread dans un domaine d'application différent qui dispose d'un verrou sur le même objet.
CA2007 : N’attendez pas directement une Tâche Une méthode asynchrone attend une Task directe.
CA2008 : Ne pas créer de tâches sans passer TaskScheduler Une opération de création ou de continuation de tâche utilise une surcharge de méthode qui ne spécifie pas de paramètre TaskScheduler.
CA2009 : N’appelez pas ToImmutableCollection sur une valeur ImmutableCollection La méthode ToImmutable a été inutilement appelée sur une collection immuable à partir de l’espace de noms System.Collections.Immutable.
CA2011 : Ne pas assigner la propriété dans son setter Une propriété a été affectée accidentellement à une valeur au sein de son propre accesseur set.
CA2012 : Utiliser correctement ValueTasks Les valueTasks retournés par les appels de membres sont destinés à être directement attendus. Les tentatives d’utilisation d’une ValeurTask plusieurs fois ou d’accéder directement au résultat d’un utilisateur avant qu’il soit connu pour être terminé peuvent entraîner une exception ou une altération. Ignorer une telle ValeurTask est probablement une indication d’un bogue fonctionnel et peut dégrader les performances.
CA2013 : Ne pas utiliser ReferenceEquals avec des types valeur Lors de la comparaison des valeurs à l’aide de System.Object.ReferenceEquals, si objA et objB sont des types valeur, ils sont boxés avant qu’ils ne soient passés à la méthode ReferenceEquals. Cela signifie que même si objA et objB représentent la même instance d’un type valeur, la méthode ReferenceEquals retourne néanmoins false.
CA2014 : Ne pas utiliser stackalloc dans les boucles. L’espace de pile alloué par un stackalloc est libéré uniquement à la fin de l’appel de la méthode actuelle. L’utilisation de celle-ci dans une boucle peut entraîner une croissance de pile illimitée et des conditions de dépassement de capacité de pile éventuelles.
CA2015 : Ne pas définir de finaliseurs pour les types dérivés de MemoryManager<T> L’ajout d’un finaliseur à un type dérivé de MemoryManager<T> peut permettre à la mémoire d’être libérée alors qu’elle est toujours utilisée par un Span<T>.
CA2016 : Transférer le paramètre CancellationToken aux méthodes qui l’acceptent Transférez le paramètre CancellationToken aux méthodes qui en prennent un pour vous assurer que les notifications d’annulation d’opération sont correctement propagées, ou transmettez CancellationToken.None explicitement pour indiquer intentionnellement ne pas propager le jeton.
CA2017 : Incompatibilité du nombre de paramètres Le nombre de paramètres fournis dans le modèle de message de journalisation ne correspond pas au nombre d’espaces réservés nommés.
CA2018 : l’argument count à Buffer.BlockCopy doit spécifier le nombre d’octets à copier Lors de l’utilisation de Buffer.BlockCopy, l’argument count spécifie le nombre d’octets à copier. Vous devez uniquement utiliser Array.Length pour l’argument count sur les tableaux dont les éléments sont exactement un octet de taille. Les tableaux byte, sbyteet bool ont des éléments d’une taille d’un octet.
CA2019: Les champs ThreadStatic ne doivent pas utiliser l’initialisation inline Un champ annoté avec ThreadStaticAttribute est initialisé inline ou explicitement dans un constructeur static (Shared en Visual Basic).
CA2020 : Empêcher les changements de comportement causés par les opérateurs intégrés d’IntPtr/UIntPtr Certains opérateurs intégrés ajoutés dans .NET 7 se comportent différemment des opérateurs définis par l’utilisateur dans .NET 6 et versions antérieures. Certains opérateurs utilisés pour lever dans un contexte non vérifié lors du dépassement de capacité ne lèvent plus, sauf s’ils sont encapsulés dans le contexte vérifié. Certains opérateurs qui ne lèvent pas précédemment dans le contexte archivé lèvent maintenant, sauf si le contexte est encapsulé.
CA2021 : N’appelez pas Enumerable.Cast<T> ou Enumerable.OfType<T> avec des types incompatibles Un appel à Enumerable.Cast<TResult>(IEnumerable) ou Enumerable.OfType<TResult>(IEnumerable) spécifie un paramètre de type incompatible avec le type de la collection d’entrée.