2015-11-12 5 views
2

Я хотел бы разместить строки, необходимые для подавления предупреждений StyleCop, как константы в классе, так что мне не нужно размещать строки по всему миру и извлекать выгоду из функции find all reference, чтобы узнать, сколько раз я подавлял, править.Почему я не могу использовать константы в [SuppressMessage (...)] вместе с 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 прямым анализом исходного кода? Есть ли способ заставить его работать в усадьбе, указанной выше?

ответ

4

StyleCop работает с исходным кодом, а не скомпилированными сборками. В логике StyleCop нет ничего для того, чтобы потреблять SuppressMessageAttribute экземпляры, которые пытались бы разыменовать константы, чтобы читать их значения, поэтому вы практически ничего не можете сделать, чтобы заставить StyleCop распознавать ваши константы. (Если вы успешно использовали этот подход с FxCop, он работает, потому что FxCop анализирует скомпилированные сборки, где ссылки на константы уже заменены их буквальными значениями.)

 Смежные вопросы

  • Нет связанных вопросов^_^