考虑以下代码,它包含在单个文件中:
namespace Foo
{
public partial class One
{
}
}
namespace Baa
{
public partial class Two
{
}
}
编译此代码会导致两个 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请抑制提醒我单个文件中的多个命名空间表明不良编程习惯的冲动...
编辑(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
在也使用StyleCopOverrideSettingsFile
. 或者,可能只是Settings.StyleCop
文件名错误,或者我把它放在了错误的位置(我把它放在 csproj 文件旁边。
编辑(20130425):
最终我放弃了。有问题的代码是由 Visual Studio 模板文件 (.TT) 自动生成的,因此我付出了额外的努力,使模板代码将命名空间拆分为单独的文件。