【问题标题】:Why can't I use constants in [SuppressMessage(...)] together with StyleCop?为什么我不能将 [SuppressMessage(...)] 中的常量与 StyleCop 一起使用?
【发布时间】:2016-02-13 22:23:21
【问题描述】:

我想将抑制 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 是否直接解析我的源代码?有没有办法让它在上述庄园工作?

【问题讨论】:

    标签: c# stylecop


    【解决方案1】:

    StyleCop 适用于源代码,而不是已编译的程序集。 StyleCop 逻辑中没有任何东西可以使用 SuppressMessageAttribute 实例来尝试取消引用常量以读取它们的值,因此您基本上无法做任何事情来让 StyleCop 识别您的常量。 (如果您已经成功地在 FxCop 中使用了这种方法,它会起作用,因为 FxCop 会分析已编译的程序集,其中对常量的引用已被它们的字面值替换。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-26
      • 2013-07-02
      • 2015-11-08
      • 2013-08-24
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多