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 9

3 ответа:

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

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

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


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

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

В вашем экземпляре нет определенного места для размещения атрибута (по умолчанию он должен копироваться как [module: SuppressMessage(...)]. Это хороший признак того, что он принадлежит либо к началу файла, если это подавление на уровне модуля, специфичное для файла (например, для ресурса, специфичного для файла). Или, что более вероятно, он принадлежит к глобальному ресурсу.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), используемой в качестве первого слова a идентификатора в стиле Camel.

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

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

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