単一のファイルに含まれている次のコードを検討してください。
namespace Foo
{
public partial class One
{
}
}
namespace Baa
{
public partial class Two
{
}
}
このコードをコンパイルすると、次の 2 つの StyleCop 警告が表示されます。
- SA1402:FileMayOnlyContainASingleClass
- SA1403:FileMayOnlyContainASingleNamespace
SA1402 の抑制は期待どおりに機能します。
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
{
}
}
残念ながら、SA1403 を抑制することはできないようです。
各クラスの上で次の抑制を試みました(SA1402抑制による):
[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace")]
また、ファイルの先頭とグローバル抑制ファイルの両方で、次のアセンブリ レベルの抑制を試みました (これは賢明な考えではないことに気付きました)。
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace")]
しかし、役に立たない。
だから、私の質問は次のとおりです:StyleCop警告SA1403を抑制するにはどうすればよいですか?
ありがとう、
え
PS 1 つのファイルに複数の名前空間があると、プログラミングのやり方が悪いということを思い出したいという衝動を抑えてください...
編集 (20121127): Mightymuke の回答に沿って、SourceFileList
.
StyleCopOverrideSettingsFile
ビルドでは、共有ルール ファイルを指すタグを使用します。Mightymuke の提案に沿って、ファイルに以下を追加しました。
<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>
これもうまくいきませんでした。
ただし、これは設計によるものである可能性があると思います。このタグはプロジェクト レベルよりも高いレベルでは使用できないことを示唆するStyleCop バグ レポートを見つけました。SourceFileList
この情報を念頭に置いてSettings.StyleCop
、プロジェクト レベルでファイルを追加しようとしました。
まだ喜びはありません。
StyleCopOverrideSettingsFile
タグが他のすべての設定ファイルを無効にしている可能性を現在調べています。これは論理的に思えますが、もしそうなら、私が見た動作は、SourceFileList
も使用するビルドで aを使用できないことを意味しますStyleCopOverrideSettingsFile
。または、単純にSettings.StyleCop
ファイル名が間違っているか、間違った場所に配置した可能性があります (csproj ファイルの隣に配置しました)。
編集 (20130425):
結局、私はあきらめました。問題のコードはビジュアル スタジオ テンプレート ファイル (.TT) によって自動生成されたので、テンプレート コードで名前空間を個別のファイルに分割するという追加の作業を行いました。