web-dev-qa-db-fra.com

Comment supprimer un avertissement StyleCop?

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.

53
Nam G VU

Voici ce dont vous avez besoin:

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
47
Jason Allor

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.

20
Sky Sanders

À 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.

9
akjoshi

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.

7
Kent Boogaart

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.")]
4
Colonel Panic

Vous ne pouvez pas simplement supprimer la règle au lieu de salir votre code?

Il en va de même pour FxCop ...

4
leppie
  1. Accédez à l'Explorateur de solutions
  2. Accédez à votre projet
  3. Développer les références
  4. Développer les analyseurs
  5. Développez StyleCop.Analyzers
  6. Cliquez avec le bouton droit sur une règle particulière que vous souhaitez désactiver au niveau global (projet)
  7. Définir la gravité du jeu de règles -> Ne rien sélectionner
3
Akshunya

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!

2
Oleg Shuruev

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>
1
Ashwini Patil

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.

1
Philip Smith

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.

0
Stefan Bormann

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
0
Ryan Prechel