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

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

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

public class Rules
{
  public const string ReSharper= "ReSharper";
  public const string InconsistentNaming = "InconsistentNaming";
}

如下装饰我的成员

public class MyClass
{
  [SuppressMessage(Rules.ReSharper, Rules.InconsistentNaming)]
  protected uint v { get; }
}

使得 ReSharper 仍然抱怨名称以小写字母开头的属性。仅当使用

归因于成员时
[SuppressMessage("ReSharper", "InconsistentNaming")]

ReSharper 警告消失。有没有办法使用常量使其在上述庄园中工作?

ReSharper 根据源代码的语法执行分析并报告警告。所以它专门寻找 "ReSharper""InconsistentNaming" 等形式的字符串标记。为了理解您的常量,它会执行代码的语义分析,例如通过确定 Rules.ReSharper 是什么然后当它发现它是一个字符串常量时它的值是什么。

后一种分析速度要慢得多,并且会影响 ReSharpers 分析的性能。所以它不会那样做,所以你必须指定文字字符串。