60

我正在使用 StyleCop 并想抑制一些不适合我风格的警告。我更喜欢有解决方案

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

我已经搜索了互联网,但仍然不确定如何进行压制。

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

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

但他们没有说在哪里以及使用哪个命名空间。

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

请帮忙。

[编辑]就我而言,我有关于SA1202 的警告:所有私有方法必须放在所有令人困扰的公共方法之后,因为我将相关代码分组到区域中。我想仅针对某些特定方法抑制这些警告。

4

12 回答 12

49

这是您需要的:

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
于 2010-07-21T03:41:38.497 回答
21

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

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)")]

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

于 2010-07-20T07:05:51.867 回答
9

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

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

但它说 -

全局抑制

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

于 2011-09-19T12:38:56.113 回答
7

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

对于个人覆盖,SuppressMessage是要走的路。

于 2010-07-20T07:02:03.117 回答
6

阅读 Style Cop 的警告,寻找字母数字代码。在你的情况下'SA1202'。然后浏览到 Style Cop 网站上的相应页面。根据需要更改 URL https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1202.md

复制标有“如何禁止违规”的行。将属性粘贴到 Style Cop 抱怨的类上方

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
于 2013-04-09T09:48:50.280 回答
6
  1. 转到解决方案资源管理器
  2. 转到您的项目
  3. 展开参考
  4. 展开分析器
  5. 展开 StyleCop.Analyzers
  6. 右键单击要在全局(项目)级别禁用的特定规则
  7. 设置规则集严重性 -> 选择无
于 2018-08-14T06:53:36.237 回答
3

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

FxCop 也是如此……

于 2010-07-20T06:55:19.143 回答
2

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

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

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

我也同意在这些领域写什么是相当不明显的。

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

2. 关于“全局”禁止规则 - 为什么不直接通过设置编辑器关闭它们?设置文件是通过文件系统继承的,因此您可以轻松地在文件夹结构的“顶部”拥有一个“主”设置文件,以及一些其他文件(与主文件保持“差异”),但某些项目除外,如果你想要的话(就像这里描述的那样)。

祝你好运!

于 2011-09-19T18:51:53.080 回答
2

您可以在项目根文件夹中的 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>
于 2018-03-08T21:18:11.503 回答
1

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

于 2010-08-10T11:06:12.857 回答
0

Visual Studio 2015+使用的StyleCop.Analyzers NuGet包的 README.md 包含指向规则文档的链接。每个规则的文档都包含“如何禁止违规”部分。对于SA1202 规则,选项有:

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

#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess
于 2019-06-20T16:17:56.740 回答
0

除了已有的有用答案:

如果您在抑制文件中抑制警告,则GlobalSuppressions.cs可以编辑该[assembly: SuppressMessage(StyleCop...blabla行并完全删除Scope=...andTarget=...标记。这使得项目中的抑制成为全局。

于 2018-03-21T08:48:32.737 回答