为什么我不能将[SuppressMessage(...)]中的常量与StyleCop一起使用?

时间:2015-11-12 14:43:54

标签: c# stylecop

我想将压缩StyleCop警告所需的字符串作为常量放在一个类中,这样我就不需要将字符串全部放在一起并从查找所有引用函数中受益,以找出我已经抑制了多少次哪个规则。

public class Rules
{
  public const string Naming = "Microsoft.StyleCop.CSharp.NamingRules";
  public const string SA1310 = "SA1310:FieldNamesMustNotContainUnderscore";
}

按如下方式装饰我的课程

[SuppressMessage(Rules.Naming, Rules.SA1310)]
public class MyClass
{
  public readonly int my_field;
}

使StyleCop仍然抱怨名称中包含下划线的字段。只有在使用

归类时
[SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1310:FieldNamesMustNotContainUnderscore")]

StyleCop警告消失。这是为什么? StyleCop直接解析我的源代码吗?是否有办法让它在上述庄园中发挥作用?

1 个答案:

答案 0 :(得分:4)

StyleCop适用于源代码,而不是编译的程序集。 StyleCop逻辑中没有任何内容可以消耗SuppressMessageAttribute实例来尝试取消引用常量来读取它们的值,因此基本上没有什么可以让StyleCop识别你的常量。 (如果您已成功使用此方法与FxCop,它可以工作,因为FxCop分析已编译的程序集,其中对常量的引用已被其文字值替换。)