C# 如何抑制StyleCop警告?
我正在使用StyleCop,希望抑制一些不符合我风格的警告。我宁愿有解决问题的办法 1) 在线代码抑制C# 如何抑制StyleCop警告?,c#,.net,visual-studio-2010,stylecop,C#,.net,Visual Studio 2010,Stylecop,我正在使用StyleCop,希望抑制一些不符合我风格的警告。我宁愿有解决问题的办法 1) 在线代码抑制 2) 全局设置抑制 我已经在网上搜索过了,但是怎么做呢 对于方法1),他们说添加行: [程序集:SuppressMessage(“Microsoft.Design”, “SA1202:所有私有方法必须放在所有公共方法之后”, Scope=“namespace”,Target=“Consus.Client.ClientVaultModule.Services.OnlineDetection”)]
2) 全局设置抑制 我已经在网上搜索过了,但是怎么做呢 对于方法1),他们说添加行: [程序集:SuppressMessage(“Microsoft.Design”, “SA1202:所有私有方法必须放在所有公共方法之后”, Scope=“namespace”,Target=“Consus.Client.ClientVaultModule.Services.OnlineDetection”)] 但是他们没有说在哪里以及使用哪个名称空间 对于方法2),他们说要使用GlobalSuppress文件,但目前搜索操作方法似乎并不容易 请帮忙 [已编辑]
在我的例子中,我有关于SA1202的警告:所有私有方法必须放在所有公共方法之后,这很麻烦,因为我将相关代码分组到区域中。我只想对某些特定的方法取消这些警告。你不能删除规则而不是弄脏你的代码吗
FxCop也是如此…如果您已经安装了StyleCop,您可以右键单击您的项目,将有一个StyleCop选项。单击此按钮,您将看到您可以阻止某些规则对您的项目运行。此外,您还可以创建一个单独的规则文件,以便在不同的项目之间共享。这意味着您可以按需要的方式配置规则一次,然后在所有项目之间共享该配置
对于单个覆盖,
SuppressMessage
是一种方法。内联抑制的示例类似于此-检查代码中的名称空间,并与抑制进行比较
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;
}
您可以通过右键单击警告自动生成此代码。以下是您需要的:
[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
或者,您可以将区域中的代码移动到部分类中。然后,stylecop规则的问题将消失。从stylecop 4.3.2开始,可以通过在源代码中添加抑制属性来抑制规则违规的报告 规则抑制 但是它说- 全球压制 StyleCop不支持全局抑制或 文件级抑制。禁止显示必须放置在代码上 元素 一,。 在您的情况下,correct
SuppressMessage
属性应如下所示:
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
private void SomeMethod()
{
}
请注意,您可以将其放置在任何其他元素上(例如,在类上-然后整个类中的所有类似冲突都将被禁止)
我也同意,在这些领域写些什么是不明显的
实际上,第一个应该是StyleCop Analyzer类的完全限定名,可以从源代码中找到(例如,从)。
第二个应该以规则代码开始,然后是冒号和规则枚举的名称(幸运的是,它看起来总是像设置编辑器中显示的规则名称,但没有空格)
二,。
关于“全局”抑制规则,为什么不通过设置编辑器将其关闭?设置文件是通过文件系统继承的,因此您可以很容易地在文件夹结构的“顶部”有一个“主”设置文件,以及一些其他文件(保留与主文件的“差异”),如果您愿意,某些项目会有例外(如上文所述)
祝你好运 阅读Style Cop的警告,寻找字母数字代码。在您的案例“SA1202”中。然后浏览到Style Cop网站上的相应页面。根据需要更改URL 复制标记为“如何抑制冲突”的行。将属性粘贴到类的上方,该类使用哪种样式
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
您可以在项目根文件夹的Settings.StyleCop文件中禁用不需要的规则。 您将需要包含规则的命名空间,可在以下位置找到: 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>
假的
除了已有的有用答案外:
如果在禁止显示文件GlobalSuppressions.cs
中禁止显示警告,
您可以编辑该[assembly:SuppressMessage(StyleCop…blabla
行,并完全删除范围=…
和目标=…
标记。这使抑制在项目中成为全局的
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
及
我刚刚添加了无法独占代码的原因。请查看我编辑的问题。我尝试右键单击警告(在错误/警告列表中)但是上下文菜单项不允许我对其进行限制。我使用的是VS 2010。你知道为什么吗?@Nam-不确定,我举的例子是使用vs2008。让我启动2010,看一看。@Poter:我已经在这里发布了我的相关问题@Nam-与VS 2010有一些问题-将花费我几个小时。如果到那时你还没有得到一个好的答案,我将向你汇报。B但实际上这应该是一个非常类似的过程。在那之前..嗯,我想你不能在StyleCop警告上使用上下文菜单。我显示的是来自FxCop的。但是-禁止语法是相同的。所以我想你的问题是找到你正在破坏的规则的名称空间,以便你可以手动禁止,对吗?这里也提供了相同的信息-如何你推导出那两个神奇的字符串了吗?所有的操作都是代码“SA1202”。我有一个类似的问题(代码“SP0100”),我无法推导出相应的字符串。@collone
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess