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

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 ответа

Решение

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

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

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


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

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

В вашем случае нет определенного места для размещения атрибута (по умолчанию он должен копироваться как [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" в свою сборку. Перейдите в Свойства> Построить и добавьте условный символ компиляции.

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

Из конвенций о капитализации:

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

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

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

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

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

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

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

Другие вопросы по тегам