2010-07-20 168 views
48

我正在使用StyleCop,并想压制一些不适合我的风格的警告。我喜欢有如何禁止StyleCop警告?

1溶液)行代码抑制
2)全球环境抑制

我在网上搜索,但still not sure怎么做的抑制。

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

[装配:SuppressMessage( “Microsoft.Design”, “SA1202:所有的私有方法必须放在所有公共方法后”, 范围=“命名空间”,目标=“Consus.Client.ClientVaultModule.Services.OnlineDetection”)]

但他们不说哪里和哪个命名空间被使用。

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

请帮忙。

[编辑] 就我而言,我有警告有关SA1202:所有的私有方法必须放在所有公共方法因为我组这是困扰我的相关代码到区域之后。我想压制这些警告只是一些特定的方法。

+3

理想的情况下,用鼠标右键单击,“抑制”(或右点击“修复”)。但StyleCop是由受虐狂写的,所以你必须手工修复所有问题。如果有任何设计要由机器完成的工作,就是这样。真是浪费。 – 2015-04-02 09:49:36

回答

4

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

也是一样的FxCop ...

+0

我刚刚添加了为什么我不能独享代码的原因。请看我编辑的问题。 – 2010-07-20 07:03:40

6

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

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

18

直列抑制的一个例子是与此类似 - 检查相比,抑制

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; 
     } 

全局supression文件中的代码的命名空间是在项目的根目录中的文件名为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)")] 

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

+3

我试过右键单击警告(在错误/警告列表中),但没有任何上下文菜单项允许我禁止它。我正在使用VS 2010.你知道为什么吗? – 2010-07-20 07:17:06

+0

@Nam - 不确定,我举的例子是使用vs2008。让我点燃2010年,并采取偷看。 – 2010-07-20 07:35:51

+0

@poet:我已经在这里发布我的相关问题http://stackoverflow.com/questions/3287957/how-to-supress-stylecop-warning-sa1201-all-methods-must-be-placed-after-all-亲 – 2010-07-20 07:50:17

44

这里有您需要什么:

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

你是如何演绎这两个魔法字符串的?所有OP发布的代码是'SA1202'。我有一个类似的问题(代码'SP0100'),我不能推断出相应的字符串。 – 2013-01-07 14:40:31

+0

@Colonel Panic:运行时可以从StyleCop警告消息中获取第一个字符串。例如。 “SA1202:CSharp.OrderingRules:blahblah”。然后用编辑器打开StyleCop设置文件,并用SA代码搜索以找到实际的规则,它是短名称。 – Hirvox 2013-02-20 09:54:06

+6

如果您访问http://www.stylecop.com/docs/SA1202.html(或其他警告的类似页面url),您可以找到非常清晰的抑制消息语法细节。 – Seph 2013-09-24 10:16:40

1

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

9

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

规则镇压 http://stylecop.soyuz5.com/Suppressions.html

但它说 -

全球镇压

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

+0

提供相同的信息这里也是 - http://blogs.msdn.com/b/sourceanalysis/archive/2009/08/10/rule-suppressions.aspx – akjoshi 2011-09-19 12:56:52

2

1. 在你的情况,正确SuppressMessage属性应该像这样的:

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

请注意,您可以将它放在任何其他元素(例如上,在类 - 那么所有类似的侵权行为在整个班级将被压制)。

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

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

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

祝你好运!

2

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

复制标有'如何抑制违规行'的行。关于哪些类型警匪呻吟

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

类以上的属性粘贴您可以禁用规则,你不希望在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> 
+0

如果你能展示一些例子,这会更有帮助OP可能需要。 – sorak 2018-03-08 21:46:49