如何抑制StyleCop警告?

时间:2010-07-20 06:53:09

标签: c# .net visual-studio-2010 stylecop

我正在使用StyleCop并希望抑制一些不符合我风格的警告。

我更喜欢解决方案

1)内联代码抑制
2)全局设置抑制

我搜索了互联网,但still not sure如何进行压制。

对于方法1),他们说要添加以下行:

  

[assembly:SuppressMessage(“Microsoft.Design”,   “SA1202:所有私人方法必须放在所有公共方法之后”,   Scope =“namespace”,Target =“Consus.Client.ClientVaultModule.Services.OnlineDetection”)]

但是他们没有说明要使用的名称空间和位置。

对于方法2),他们说使用GlobalSuppress文件,但目前似乎不容易搜索如何操作。

请帮忙。

将帖子 在我的情况下,我有关于 SA1202的警告:所有私有方法必须放在所有公共方法之后这是困扰因为我将相关代码分组到区域。我想仅针对某些方法来抑制这些警告。

12 个答案:

答案 0 :(得分:45)

以下是您的需求:

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]

答案 1 :(得分:20)

内联抑制的示例与此类似 - 检查代码中的名称空间与抑制相比

namespace Soapi
{
        ///<summary>
        ///</summary>
        ///<param name = "message"></param>
        ///<param name = "statusCode"></param>
        ///<param name = "innerException"></param>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object)")]
        public ApiException(string message, ErrorCode statusCode, Exception innerException)
            : base(String.Format("{0}\r\nStatusCode:{1}", message, statusCode), innerException)
        {
            this.statusCode = statusCode;
        }

全局抑制文件是项目根目录中名为GlobalSuppressions.cs的文件,可能如下所示:

// This file is used by Code Analysis to maintain SuppressMessage 
// attributes that are applied to this project. 
// Project-level suppressions either have no target or are given 
// a specific target and scoped to a namespace, type, member, etc. 
//
// To add a suppression to this file, right-click the message in the 
// Error List, point to "Suppress Message(s)", and click 
// "In Project Suppression File". 
// You do not need to add suppressions to this file manually. 

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object,System.Object)", Scope = "member", Target = "Soapi.ApiException.#.ctor(System.String,Soapi.ErrorCode,System.String,System.Exception)")]

您可以通过右键单击警告自动生成此代码。

答案 2 :(得分:9)

从StyleCop 4.3.2开始,可以通过在源代码中添加抑制属性来抑制规则违规的报告。

规则抑制 http://stylecop.soyuz5.com/Suppressions.html

但它说 -

全球抑制

  

StyleCop不支持全局抑制或概念   文件级抑制。抑制必须放在代码上   元件。

答案 3 :(得分:7)

如果您已经安装了StyleCop,则可以右键单击您的项目,并且会有一个StyleCop选项。单击此按钮,您将看到可以阻止某些规则甚至针对您的项目运行。此外,您可以创建单独的规则文件以在不同项目之间共享。这意味着您可以按照您希望的方式配置规则,然后在所有项目之间共享该配置。

对于个别覆盖,SuppressMessage是可行的方法。

答案 4 :(得分:4)

你不能删除规则而不是弄脏你的代码吗?

同样适用于FxCop ......

答案 5 :(得分:4)

阅读Style Cop的警告,寻找字母数字代码。在您的情况下'SA1202'。然后浏览到Style Cop网站上的相应页面。根据需要更改网址http://www.stylecop.com/docs/SA1202.html

复制标有“如何抑制违规行为”的行。将该属性粘贴到Style Cops所在的类上方

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]

答案 6 :(得分:3)

  1. 转到解决方案资源管理器
  2. 转到您的项目
  3. 扩展引用
  4. 扩展分析器
  5. 展开StyleCop.Analyzers
  6. 右键单击要在全局(项目)级别禁用的特定规则
  7. 设置规则集严重性->不选择

答案 7 :(得分:2)

1。 在您的情况下,正确的SuppressMessage属性应如下所示:

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
private void SomeMethod()
{
}

请注意,您可以将它放在任何其他元素上(例如,在类上 - 然后将强制执行整个类中的所有类似违规)。

我也同意在这些领域写什么是非常明显的。

实际上,第一个应该是 StyleCop分析器类的完全限定名称,可以从源代码中找到(例如来自here)。 第二个应该以规则代码开头,然后是冒号和规则枚举的名称(幸运的是,它总是看起来像设置编辑器中显示的规则名称,但是没有空格。)

2。 关于“全局”抑制规则 - 为什么不通过设置编辑器关闭它们?设置文件是通过文件系统继承的,因此您可以轻松地在文件夹结构的“顶部”放置一个“主”设置文件,以及一些其他文件(与main保持“差异”),并为某些项目制作例外,如果你愿意(如描述here)。

祝你好运!

答案 8 :(得分:1)

或者,您可以将区域中的代码移动到部分类中。然后,stylecop规则的问题就会消失。

答案 9 :(得分:1)

您可以在项目根文件夹中的Settings.StyleCop文件中禁用您不需要的规则。 您将需要包含规则的命名空间,可在此处找到: http://stylecop.soyuz5.com/StyleCop%20Rules.html

Settings.stylecop文件代码供您参考:

<StyleCopSettings Version="105">
  <Analyzers>
    <Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
      <Rules>
        <Rule Name="ElementsMustBeSeparatedByBlankLine">
          <RuleSettings>
            <BooleanProperty Name="Enabled">False</BooleanProperty>
          </RuleSettings>
        </Rule>
      </Rules>
      <AnalyzerSettings />
    </Analyzer>
  </Analyzers>
</StyleCopSettings>

答案 10 :(得分:0)

除了已有的有用答案:

如果您在抑制文件GlobalSuppressions.cs中取消警告, 您可以修改[assembly: SuppressMessage(StyleCop...blabla行并完全删除Scope=...Target=...代码。这使得该项目中的抑制全局化。

答案 11 :(得分:0)

Visual Studio 2015+使用的README.md NuGet程序包的StyleCop.Analyzers包含指向documentation for the rules的链接。每个规则的文档均包含“如何抑制违规”部分。对于SA1202 rule,选项为:

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]

#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess