Stylecop / FXCOP 10 - Comment supprimer correctement un message uniquement au niveau de l'espace de noms?

StackOverflow https://stackoverflow.com/questions/6386902

Question

FXCOP 10 se plaint des éléments suivants:

using XYZ.Blah; //CA1709 - "XYZ"
using Xyz.Blah; //No complaint.

using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name.

Le problème est ... Je veux que le nom de mon entreprise apparaisse dans toutes les majuscules car XYZ est une abréviation. La longue version du nom est beaucoup trop longue pour être un espace de noms utile. Microsoft s'en tire avec ce genre de choses car leur acronyme ne représente que 2 lettres.

using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.

Alors, je cherchais à ajouter un SuppressMessageAttribute pour supprimer cet avertissement. Mais, je ne sais pas comment le faire correctement pour seulement (ou où même le coller) afin qu'il affecte seulement cette seule instance. Je ne veux rien supprimer dans cet espace de noms parce que je veux attraper d'autres erreurs que je fais. J'ai regardé le MSDN et Google recherché, mais je ne trouve rien qui montre comment cibler spécifiquement cette instance. Le plus proche que j'ai trouvé était scope = "namespace" mais je ne savais pas si cela signifie qu'il affecte le nom réel de l'espace de noms ou si cela affecte tout dans cet espace de noms.

Était-ce utile?

La solution

MSDN - CA1709: Les identifiants doivent être correctement enveloppés:

Il est sûr de supprimer cet avertissement si vous avez vos propres conventions de dénomination, ou si l'identifiant représente un nom propre, par exemple, le nom d'une entreprise ou d'une technologie.

Vous pouvez également ajouter des termes spécifiques, des abréviations et des acronymes à un dictionnaire personnalisé d'analyse de code. Les termes spécifiés dans le dictionnaire personnalisé ne provoqueront pas de violations de cette règle. Pour plus d'informations, voir comment: personnaliser le dictionnaire d'analyse de code.


Cela étant dit, si vous vous sentez justifié de supprimer le message, ce n'est vraiment pas du tout difficile. Dans FXCOP 10, cliquez avec le bouton droit sur tout message que vous souhaitez supprimer et aller copier comme> supprimer le message ou copier comme> Message de suppression au niveau du module.

Tu devrais placer le SuppressMessageAttributes dans les endroits appropriés. Les attributs qui suppriment un seul emplacement doivent être placés sur cet emplacement, par exemple, au-dessus d'une méthode, d'un champ, d'une propriété ou d'une classe.

Dans votre instance, il n'y a pas d'emplacement spécifique pour placer l'attribut (par défaut, il devrait copier comme [module: SuppressMessage(...)]. C'est une bonne indication qu'il appartient soit en haut d'un fichier s'il s'agit d'une suppression au niveau du module particulier à un fichier (par exemple, à une ressource spécifique à un fichier). Ou, et plus probablement, il appartient à un fichier globalsuppressions.cs.

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]

Vous pouvez également raccourcir le CheckId propriété si vous le souhaitez, mais il est bon de savoir ce que signifie CA1709. Si vous n'en avez pas envie, cela fonctionne également:

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]

Et enfin ... tout cela sera infructueux à moins que vous n'incluez le symbole «Code_analysis» dans votre construction. Accédez aux propriétés> Build et ajoutez le symbole de compilation conditionnelle.

Autres conseils

Les acryonymes ne sont pas censés être en haut de la casse dans Conventions de dénomination .NET. Par exemple HttpResponse etc.

Du Conventions de capitalisation:

Le boîtier d'acronymes dépend de la durée de l'acronyme. Tous les acronymes mesurent au moins deux personnages. Aux fins de ces directives, si un acronyme est exactement deux caractères, il est considéré comme un court acronyme. Un acronyme de trois personnages ou plus est un long acronyme.

Les directives suivantes spécifient le boîtier approprié pour les acronymes courts et longs. Les règles de boîtier de l'identifiant ont priorité sur les règles de boîtier de l'acronyme.

Capitalisez les deux caractères des acronymes à deux caractères, à l'exception du premier mot d'un identifiant basé sur chameau.

Une propriété nommée DBRATE est un exemple d'acronyme court (db) utilisé comme premier mot d'un identifiant basé sur Pascal. Un paramètre nommé Iochannel est un exemple d'acronyme court (IO) utilisé comme premier mot d'un identifiant basé sur chameau.

Capitalisez uniquement le premier caractère des acronymes avec trois caractères ou plus, à l'exception du premier mot d'un identifiant basé sur chameau.

Une classe nommée XMLWriter est un exemple d'acronyme long utilisé comme premier mot d'un identifiant basé sur Pascal. Un paramètre nommé HTMLReader est un exemple d'acronyme long utilisé comme premier mot d'un identifiant basé sur chameau.

Si vous vérifiiez les noms via Stylecop, vous pouvez utiliser Stylecop + (Règles personnalisées) qui prend en charge la liste des abréviations configurables.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top