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

Why can't I use constants in [SuppressMessage(...)] together with StyleCop?

我想将抑制 StyleCop 警告所需的字符串作为常量放在 class 中,这样我就不需要到处放置字符串并从查找所有引用函数中获益来找出我抑制了多少次规则。

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

装饰我的 class 如下

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

使得 StyleCop 仍然抱怨名称中包含下划线的字段。仅当将 class 归因于

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

StyleCop 警告消失。这是为什么? StyleCop 是否直接解析我的源代码?有没有办法让它在上面提到的庄园里工作?

StyleCop 针对的是源代码,而不是已编译的程序集。 StyleCop 逻辑中没有任何内容用于使用 SuppressMessageAttribute 实例,这些实例会尝试取消引用常量以读取它们的值,因此基本上您无法执行任何操作来使 StyleCop 识别您的常量。 (如果您一直在 FxCop 中成功使用此方法,那么它会起作用,因为 FxCop 分析编译的程序集,其中对常量的引用已被其文字值替换。)