Подтвердить что ты не робот

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

В проекте, над которым я работаю, 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, С#, FxCop 1.36 beta.

4b9b3361

Ответ 1

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

Ответ 2

В FxCop 1.36 на вкладке "Правописание и анализ" есть опция проекта, которая будет подавлять анализ для любого сгенерированного кода.

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

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

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

Ответ 3

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

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