我如何隐藏StyleCop警告SA1403?

问题描述 投票:9回答:4

考虑此代码,它包含在一个文件中:

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?

谢谢,

E

P.S。请压制提醒我的提醒,即单个文件中的多个名称空间说明了不良的编程习惯...

编辑(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 bug report提示不能在高于项目级别的级别使用SourceFileList标记。

考虑到这些信息,我试图在项目级别添加Settings.StyleCop文件。

仍然没有喜悦。

我现在正在研究StyleCopOverrideSettingsFile标签是否正在取消其他所有设置文件的可能性。这似乎是合乎逻辑的,但如果是这样,我所看到的行为将暗示不可能在也使用SourceFileList的内部版本中使用StyleCopOverrideSettingsFile。另外,可能是Settings.StyleCop是错误的文件名,或者我将其放置在错误的位置(我将其放在csproj文件旁边。)

编辑(20130425):

最终我放弃了。有问题的代码是由Visual Studio模板文件(.TT)自动生成的,因此,我付出了额外的努力,以使模板代码将名称空间分成单独的文件。

考虑此代码,该代码包含在一个文件中:命名空间Foo {公共局部类一个{}}命名空间Baa {公共局部类两个{}}编译此...

c# stylecop
4个回答
9
投票

您需要设置抑制范围。在这种情况下,请使用“模块”。


3
投票

您将要在设置文件中创建一个File List


1
投票

我发现了更简单的方法,也许可以帮助某人。您可以右键单击您的项目,然后选择StyleCop Settings


0
投票

如果这是针对生成的文件,则只需在项目属性enter image description here下的“代码分析”部分中选中“从生成的代码中抑制结果”框>

© www.soinside.com 2019 - 2024. All rights reserved.