2012-11-22 10 views
7

diesen Code Betrachten, die in einer einzigen Datei enthalten ist:Wie kann ich die StyleCop-Warnung SA1403 unterdrücken?

namespace Foo 
{ 
    public partial class One 
    { 
    } 
} 

namespace Baa 
{ 
    public partial class Two 
    { 
    } 
} 

Dieser Code führt zwei StyleCop Warnungen Kompilieren:

  • SA1402: FileMayOnlyContainASingleClass
  • SA1403: FileMayOnlyContainASingleNamespace

Das Unterdrücken von SA1402 funktioniert wie erwartet:

namespace Foo 
{ 
    [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass")] 
    public partial class One 
    { 
    } 
} 

namespace Baa 
{ 
    [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass")]   
    public partial class Two 
    { 
    } 
} 

Leider kann ich SA1403 nicht unterdrücken.

Ich habe die folgende Unterdrückung über jede der Klassen versucht (gemäß der SA1402 Unterdrückung):

[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace")] 

Ich habe auch die folgenden Montageebene Unterdrückung versucht, sowohl am Anfang der Datei und in meiner globalen Unterdrückungsdatei (ich weiß, dass das keine vernünftige Idee ist):

Aber ohne Erfolg.

Also, meine Frage ist: Wie unterdrücke ich StyleCop Warnung SA1403?

Danke,

E

P. S. Bitte unterdrücken den Drang, mich daran zu erinnern, dass mehrere Namespaces in einer einzigen Datei Praxis schlechte Programmierung demonstriert ...

EDIT (20121127): Im Einklang mit Mightymuke die Antwort, die ich in der Möglichkeit, sah ich eine SourceFileList zu verwenden.

Wir verwenden den Tag StyleCopOverrideSettingsFile in unserem Build, der auf eine gemeinsame Regeldatei verweist. Im Einklang mit dem Vorschlag von Mightymuke fügte ich zu unserer Datei folgendes hinzu:

<SourceFileList> 
    <SourceFile>MyFileName.cs</SourceFile> 
    <Settings> 
     <Analyzers> 
     <Analyzer AnalyzerId="Microsoft.StyleCop.CSharp.MaintainabilityRules"> 
      <Rules> 
      <Rule Name="FileMayOnlyContainASingleNamespace"> 
       <RuleSettings> 
       <BooleanProperty Name="Enabled">False</BooleanProperty> 
       </RuleSettings> 
      </Rule> 
      </Rules> 
     </Analyzer> 
     </Analyzers> 
    </Settings> 
    </SourceFileList> 

Dies hat auch nicht funktioniert.

Ich glaube jedoch, dass dies von Entwurf sein könnte. Ich habe eine StyleCop bug report gefunden, die vorgeschlagen hat, dass das SourceFileList-Tag nicht höher als das Projektevel verwendet werden kann.

Mit dieser Information habe ich versucht, eine Settings.StyleCop Datei auf Projektebene hinzuzufügen.

Noch keine Freude.

Ich untersuche jetzt die Möglichkeit, dass das StyleCopOverrideSettingsFile Tag jede andere Einstellungsdatei löscht. Dies scheint logisch, aber wenn, dann würde das Verhalten, das ich gesehen habe, bedeuten, dass es nicht möglich ist, ein SourceFileList in einem Build zu verwenden, der auch StyleCopOverrideSettingsFile verwendet. Alternativ kann es einfach sein, dass Settings.StyleCop ist der falsche Dateiname oder ich habe es an der falschen Stelle (ich lege es neben der csproj-Datei.

EDIT (20130425):

Schließlich gab ich auf. Der fragliche Code wurde automatisch von einer Visual Studio-Vorlagendatei (.TT) generiert, daher ging ich zu dem zusätzlichen Aufwand, den Template-Code dazu zu bringen, die Namespaces in separate Dateien aufzuteilen.

+0

Mehrere Namespaces in einer einzigen Datei zu verwenden, demonstriert ba ...... oh, Sie sagten schon, dass: P. Ernsthaft, StyleCop hilft Ihnen, schlechte Praktiken zu vermeiden, aber Sie wollen es ignorieren und trotzdem tun? Sie gehen gegen die Verwendung davon :). – mattytommo

Antwort

3

Sie möchten in Ihrer Einstellungsdatei eine File List erstellen.

Aus der Dokumentation:

Now consider a situation where you’d like to disable some additional rules for a 
couple of specific files in the project, Class3.cs and Class4.cs. In StyleCop 
4.4, this can be accomplished by adding a <SourceFileList> section within the 
settings file: 
<SourceFileList> 
    <SourceFile>Class3.cs</SourceFile> 
    <SourceFile>Class4.cs</SourceFile> 
    <Settings> 
    <Analyzers> 
     <Analyzer AnalyzerId="Microsoft.StyleCop.CSharp.MaintainabilityRules"> 
     <Rules> 
      <Rule Name="AccessModifierMustBeDeclared"> 
      <RuleSettings> 
       <BooleanProperty Name="Enabled">False</BooleanProperty> 
      </RuleSettings> 
      </Rule> 
     </Rules> 
     </Analyzer> 
    </Analyzers> 
    </Settings> 
</SourceFileList> 

In Ihrem speziellen Fall ist es so etwas wie aussehen soll:

<SourceFileList> 
    <SourceFile>YourFile.cs</SourceFile> 
    <Settings> 
    <Analyzers> 
     <Analyzer AnalyzerId="Microsoft.StyleCop.CSharp.MaintainabilityRules"> 
     <Rules> 
      <Rule Name="FileMayOnlyContainASingleClass"> 
      <RuleSettings> 
       <BooleanProperty Name="Enabled">False</BooleanProperty> 
      </RuleSettings> 
      </Rule> 
      <Rule Name="FileMayOnlyContainASingleNamespace"> 
      <RuleSettings> 
       <BooleanProperty Name="Enabled">False</BooleanProperty> 
      </RuleSettings> 
      </Rule> 
     </Rules> 
     </Analyzer> 
    </Analyzers> 
    </Settings> 
</SourceFileList> 
+0

Interessant, ich wusste das nicht. –

5

Sie müssen den Umfang der Unterdrückung einzustellen. Verwenden Sie in diesem Fall "Modul".

[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace", Justification = "This is a generated file which generates all the necessary support classes.")] 

Das erfuhr ich von der folgenden Seite in dem „Gobal-Ebene Unterdrückungen“ Abschnitt: http://msdn.microsoft.com/en-us/library/ms244717.aspx#sectionToggle4

1

ich einfachen Weg, es zu tun, fand heraus, vielleicht hilft es jemanden. Sie können mit der rechten Maustaste auf Ihr Projekt klicken und StyleCop Settings auswählen.

Popup wird geöffnet und dort können Sie Warnungen anpassen und wählen, was Sie unterdrücken möchten. In Ihrem Fall findet sich SA1403 unter Maintainability Rules \ File Inhalt

Verwandte Themen