Исключение правила анализа кода в источнике

В проекте, над которым я работаю, FxCop показывает мне множество (я имею в виду более 400) ошибок в методах InitializeComponent (), созданных дизайнером Windows Forms. Большинство этих ошибок связано с присвоением меткам свойства Text.

Я хотел бы подавить эти методы в исходном коде, поэтому я скопировал код подавления, сгенерированный FxCop, в AssemblyInfo.cs, но он не работает.

Это атрибут, который FxCop скопировал в буфер обмена.

[module: SuppressMessage("Microsoft.Globalization",
    "CA1303:DoNotPassLiteralsAsLocalizedParameters",
    Scope = "member",
    Target = "WindowsClient.MainForm.InitializeComponent():System.Void",
    MessageId = "System.Windows.Forms.Control.set_Text(System.String)")]

Кто-нибудь знает правильный атрибут для подавления этого сообщения?

PS: Я использую Visual Studio 2005, C #, FxCop 1.36 beta.


person Julio César    schedule 30.08.2008    source источник


Ответы (3)


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

person Matt Hamilton    schedule 30.08.2008
comment
У меня было решение с несколькими проектами. CODE_ANALYSIS необходимо добавлять для каждого проекта. - person Diizzy; 23.10.2014

В FxCop 1.36 есть опция проекта на вкладке «Орфография и анализ», которая подавляет анализ любого сгенерированного кода.

Если вы не хотите отключать анализ для всего сгенерированного кода, вам необходимо убедиться, что вы добавили символ CODE_ANALYSIS в список символов условной компиляции (свойства проекта, вкладка «Сборка»). Без определения этого символа атрибуты SupressMessage будут удалены из скомпилированного кода, поэтому FxCop их не увидит.

Другая проблема с вашим атрибутом SuppressMessage заключается в том, что вы перечисляете «Target» определенного имени метода (в данном случае WindowsClient.MainForm.InitializeComponent (): System.Void) и перечисляете конкретную «Scope». Вы можете попробовать удалить их; в противном случае вы должны добавить это SuppressMessage к каждому экземпляру метода.

Вам также следует перейти на RTM-версию. FxCop 1.36, бета-версия не обнаружит автоматически более новую версию.

person Scott Dorman    schedule 30.08.2008

Сообщения о подавлении на уровне модуля должны быть вставлены в тот же файл, что и код, вызывающий ошибку FxCop, перед объявлением пространства имен или в assemblyinfo.cs. Кроме того, вам потребуется, чтобы CODE_ANALYSIS был определен как символы условного компилятора (Проект> Свойства> Сборка). После этого выполните полную перестройку проекта, и в следующий раз, когда вы запустите FxCop, ошибка должна быть перемещена на вкладку «Исключено в источнике».

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

person rjzii    schedule 30.08.2008