如何抑制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保持“差别”),如果你想这样(如这里所述)。
祝你好运!