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