StyleCop / FxCop 10 - Как правильно подавить сообщение только на уровне пространства имен? - PullRequest
10 голосов
/ 17 июня 2011

FxCop 10 жалуется на следующее:

using XYZ.Blah; //CA1709 - "XYZ"
using Xyz.Blah; //No complaint.

using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name.

Проблема в том, что ... Я хочу, чтобы название моей компании отображалось во всех ВЕРХНЯХ, потому что XYZ - это сокращение.Длинная версия имени слишком длинна, чтобы быть полезным пространством имен.Microsoft обходится без такого рода вещей, потому что их аббревиатура состоит всего из 2 букв.

using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.

Итак, я собирался добавить SuppressMessageAttribute для подавления этого предупреждения.Но я не уверен, как сделать это правильно только (или куда даже приклеить), чтобы это ТОЛЬКО влияло на этот единственный экземпляр.Я не хочу ничего подавлять в этом пространстве имен, потому что я хочу ловить любые другие ошибки, которые я делаю.Я посмотрел на поиск MSDN и Google, но я не могу найти ничего, что показывает, как конкретно нацелить этот экземпляр.Самым близким, что я нашел, был Scope = "namespace", но я не был уверен, означает ли это, что оно влияет на фактическое имя пространства имен или оно влияет на все содержимое этого пространства имен.

Ответы [ 3 ]

14 голосов
/ 17 июня 2011

MSDN - CA1709: Идентификаторы должны быть правильно указаны :

Безопасно подавлять это предупреждение, если у вас есть свои собственные соглашения об именах, или если идентификатор представляет собственное имя, например, имя компания или технология.

Вы также можете добавить конкретные условия, аббревиатуры и сокращения, которые к Пользовательский словарь для анализа кода. термины указано в пользовательском словаре не вызовет нарушений этого править. Для получения дополнительной информации см. Как настроить анализ кода Словарь.


Как говорится, если вы чувствуете себя оправданным, чтобы подавить сообщение, это действительно совсем не сложно. В FxCop 10 щелкните правой кнопкой мыши по любому сообщению, которое вы хотите подавить, и выберите «Копировать как»> «Сообщение-подавление» или «Копировать как»> «Сообщение-подавление на уровне модуля».

Вы должны разместить SuppressMessageAttribute s в соответствующих местах. Атрибуты, которые подавляют одно местоположение, должны быть размещены в этом месте, например, над методом, полем, свойством или классом.

В вашем случае нет конкретного места для размещения атрибута (по умолчанию он должен копироваться как [module: SuppressMessage(...)]. Это хороший признак того, что он принадлежит либо вверху файла, если он является модулем -уровневое подавление, специфичное для файла (например, для ресурса, специфичного для файла), или, что более вероятно, оно принадлежит файлу GlobalSuppressions.cs.

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]

Вы также можете сократить CheckId свойство, если хотите, но полезно знать, что означает CA1709. Если вам это не нравится, это также работает:

using System.Diagnostics.CodeAnalysis;

[module: SuppressMessage("Microsoft.Naming", "CA1709", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")]

И наконец ... все это будет бесплодным, если вы не включите символ "CODE_ANALYSIS" в свою сборку. Перейдите в Свойства> Построить и добавьте условный символ компиляции.

3 голосов
/ 17 июня 2011

Акрионимы не должны быть прописными в .NET именования . Например HttpResponse и т. Д.

Из соглашений об использовании заглавных букв :

Обводка сокращений зависит от длины сокращения. Все сокращения имеют длину не менее двух символов. Для целей настоящих руководящих принципов, если аббревиатура содержит ровно два символа, она считается короткой аббревиатурой. Аббревиатура из трех или более символов является длинной аббревиатурой.

В следующих инструкциях указан надлежащий корпус для коротких и длинных сокращений. Правила размещения идентификаторов имеют приоритет над правилами размещения сокращений.

Используйте заглавные буквы обоих символов двухсимвольных сокращений, кроме первого слова идентификатора в верблюжьей клетке.

Свойство с именем DBRate является примером короткой аббревиатуры (DB), используемой в качестве первого слова идентификатора в Паскале. Параметр с именем ioChannel является примером короткой аббревиатуры (IO), используемой в качестве первого слова идентификатора в верблюжьей клетке.

Прописывать только первый символ аббревиатур с тремя или более символами, кроме первого слова идентификатора в верблюжьей клетке.

Класс с именем XmlWriter является примером длинной аббревиатуры, используемой в качестве первого слова идентификатора в Паскале. Параметр с именем htmlReader является примером длинной аббревиатуры, используемой в качестве первого слова идентификатора в верблюжьей клетке.

0 голосов
/ 19 июня 2011

Если вы проверяли имена с помощью StyleCop, вы могли бы использовать StyleCop + (пользовательские правила), который поддерживает настраиваемый список сокращений.

...