如何抑制StyleCop警告?

我正在使用StyleCop,并要压制一些不适合我的风格的警告。 我更喜欢有解决scheme1)在线代码抑制和2)全局设置抑制。 我已经search了互联网,但仍然不知道如何做的压制。 对于方法1),他们说要添加行

[assembly: SuppressMessage("Microsoft.Design", "SA1202:All private methods must be placed after all public methods", Scope = "namespace", Target = "Consus.Client.ClientVaultModule.Services.OnlineDetection")] 

但是他们不会说哪里和哪个命名空间被使用。 对于方法2),他们说使用GlobalSuppress文件,但目前似乎并不容易search如何做。

请帮忙。

[编辑]在我的情况下,我有SA1202的警告:所有的私有方法必须放在所有的公共方法之后 ,因为我把我的相关代码分组成区域。 我想压制这些警告只是一些特定的方法。

这是你需要的:

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

内联抑制的一个例子与此类似 – 检查代码中的命名空间与抑制的比较

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

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

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

规则取消http://stylecop.soyuz5.com/Suppressions.html

但它说 –

全球压制

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

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

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

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

FxCop也是一样

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

复制标有“如何抑制违规行”的行。 粘贴Style Cop呻吟的类上面的属性

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

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

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

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

请注意,您可以将其放在任何其他元素上(例如,在课堂上 – 那么整个class级中的所有类似违规行为都将被抑制)。

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

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

2.关于“全局”抑制规则 – 为什么不要通过设置编辑器closures它们? 设置文件是通过文件系统inheritance的,所以你可以很容易地在文件夹结构的“顶部”有一个“主”设置文件,还有一些其他的文件(与main保持“差别”),如果你想这样(如这里所述)。

祝你好运!