J'utilise StyleCop et je souhaite supprimer certains avertissements qui ne conviennent pas à mon style. Je préfère avoir une solution pour
1) suppression de code en ligne
2) suppression des paramètres globaux
J'ai cherché sur Internet mais toujours pas sûr comment faire la suppression.
Pour la méthode 1), ils ont dit d'ajouter les lignes:
[Assembly: SuppressMessage ("Microsoft.Design", "SA1202: toutes les méthodes privées doivent être placées après toutes les méthodes publiques", Scope = "namespace", Target = "Consus.Client.ClientVaultModule.Services.OnlineDetection")]
Mais ils ne disent pas où et quel espace de noms utiliser.
Pour la méthode 2), ils ont dit d'utiliser le fichier GlobalSuppress mais il ne semble pas facile de rechercher comment le faire pour le moment.
Veuillez aider.
[Modifié] Dans mon cas, j'ai l'avertissement à propos de SA1202: Toutes les méthodes privées doivent être placées après toutes les méthodes publiques ce qui dérange puisque je regroupe mes apparentés codes en régions. Je veux supprimer ces avertissements pour certaines méthodes.
Voici ce dont vous avez besoin:
[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
Un exemple de suppression en ligne serait similaire à ceci - examinez les espaces de noms dans le code par rapport à la suppression
namespace Soapi
{
///<summary>
///</summary>
///<param name = "message"></param>
///<param name = "statusCode"></param>
///<param name = "innerException"></param>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object)")]
public ApiException(string message, ErrorCode statusCode, Exception innerException)
: base(String.Format("{0}\r\nStatusCode:{1}", message, statusCode), innerException)
{
this.statusCode = statusCode;
}
Un fichier de suppression globale est un fichier à la racine de votre projet nommé GlobalSuppressions.cs
et pourrait ressembler à ceci:
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
//
// To add a suppression to this file, right-click the message in the
// Error List, point to "Suppress Message(s)", and click
// "In Project Suppression File".
// You do not need to add suppressions to this file manually.
[Assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object,System.Object)", Scope = "member", Target = "Soapi.ApiException.#.ctor(System.String,Soapi.ErrorCode,System.String,System.Exception)")]
Et vous pouvez générer ce code automatiquement en cliquant avec le bouton droit sur l'avertissement.
À partir de StyleCop 4.3.2, il est possible de supprimer le signalement des violations de règles en ajoutant des attributs de suppression dans le code source.
Suppressions de règles http://stylecop.soyuz5.com/Suppressions.html
mais ça dit -
Suppressions globales
StyleCop ne prend pas en charge la notion de suppressions globales ou de suppressions de niveau fichier. Les suppressions doivent être placées sur un élément de code.
Si vous avez installé StyleCop, vous pouvez cliquer avec le bouton droit sur votre projet et il y aura une option StyleCop. Cliquez dessus et vous verrez que vous pouvez empêcher certaines règles de s'exécuter même sur votre projet. De plus, vous pouvez créer un fichier de règles distinct à partager entre différents projets. Cela signifie que vous pouvez configurer les règles une fois que vous le souhaitez, puis partager cette configuration entre tous vos projets.
Pour les remplacements individuels, SuppressMessage
est le chemin à parcourir.
Lisez l'avertissement de Style Cop, à la recherche du code alphanumérique. Dans votre cas, "SA1202". Ensuite, accédez à la page correspondante sur le site Web Style Cop. Modifiez l'URL selon le cas http://www.stylecop.com/docs/SA1202.html
Copiez la ligne intitulée "Comment supprimer les violations". Collez l'attribut au-dessus de la classe à propos de laquelle Style Cop gémit
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
Vous ne pouvez pas simplement supprimer la règle au lieu de salir votre code?
Il en va de même pour FxCop ...
1. Dans votre cas, l'attribut SuppressMessage
correct devrait comme suit:
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
private void SomeMethod()
{
}
Notez que vous pouvez le placer sur n'importe quel autre élément (par exemple, sur la classe - alors toutes les violations similaires dans la classe entière seront supprimées).
Je suis également d'accord qu'il n'est pas évident de savoir quoi écrire dans ces domaines.
En fait, le premier doit être le nom complet de la classe de l'analyseur StyleCop et peut être trouvé à partir du code source (par exemple de ici ). Le second doit commencer par code de règle , puis deux-points et le nom de l'énumération des règles (heureusement, il ressemble toujours au nom de la règle affiché dans l'éditeur de paramètres, mais sans espaces).
2. Concernant la suppression des règles "globalement" - pourquoi ne pas simplement les désactiver via l'éditeur de paramètres? Les fichiers de paramètres sont hérités via le système de fichiers, vous pouvez donc facilement avoir un fichier de paramètres "principal" en "haut" de votre structure de dossiers, et quelques autres fichiers (conservant la "différence" par rapport à principal) avec des exceptions faites pour certains projets, si vous le souhaitez (comme décrit ici ).
Bonne chance!
Vous pouvez désactiver les règles que vous ne souhaitez pas dans le fichier Settings.StyleCop, qui se trouve dans le dossier racine du projet. Vous aurez besoin de l'espace de noms qui contient la règle, qui peut être trouvé ici: http://stylecop.soyuz5.com/StyleCop%20Rules.html
Code du fichier Settings.stylecop pour votre référence:
<StyleCopSettings Version="105">
<Analyzers>
<Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
<Rules>
<Rule Name="ElementsMustBeSeparatedByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
</Analyzers>
</StyleCopSettings>
Vous pouvez également déplacer le code dans les régions en classes partielles. Ensuite, le problème avec la règle stylecop disparaîtra.
En plus des réponses utiles déjà en place:
Si vous supprimez un avertissement dans le fichier de suppression GlobalSuppressions.cs
, vous pouvez modifier cela [Assembly: SuppressMessage(StyleCop...blabla
ligne et supprimez entièrement le Scope=...
et Target=...
Mots clés. Cela rend la suppression globale dans le projet.
Le README.md pour le StyleCop.Analyzers package NuGet utilisé par Visual Studio 2015+ contient un lien vers le documentation des règles . La documentation de chaque règle contient une section "Comment supprimer les violations". Pour la règle SA1202 , les options sont:
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
et
#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess