Исключение правила анализа кода в источнике
-
09-06-2019 - |
Вопрос
В проекте, над которым я работаю, 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.
Решение
Возможно, вы получили правильный код, но вам также нужно добавить CODE_ANALYSIS в качестве символа, определенного прекомпилятором, в свойствах проекта. Я думаю, что эти атрибуты SuppressMessage остаются только в скомпилированных двоичных файлах, если определен CODE_ANALYSIS.
Другие советы
В FxCop 1.36 на самом деле есть опция проекта в " Правописании & amp; Анализ & Quot; вкладка, которая будет подавлять анализ для любого сгенерированного кода.
Если вы не хотите отключать анализ для всего сгенерированного кода, вам необходимо убедиться, что вы добавили символ CODE_ANALYSIS в список символов условной компиляции (свойства проекта, вкладка «Сборка»). Без определения этого символа атрибуты SupressMessage будут удалены из скомпилированного кода, поэтому FxCop их не увидит.
Другая проблема с вашим атрибутом SuppressMessage заключается в том, что вы указываете " Target " с конкретным именем метода (в данном случае WindowsClient.MainForm.InitializeComponent (): System.Void) и перечислением определенного " Scope " ;. Вы можете попробовать удалить их; в противном случае вы должны добавить это SuppressMessage к каждому экземпляру метода.
Вам также следует перейти на RTM-версию FxCop 1.36, бета не будет автоматически обнаруживать более новую версию. Р>
Сообщения подавления на уровне модуля должны быть вставлены в тот же файл, что и код, который вызывает ошибку FxCop перед объявлением пространства имен или в файле assemblyinfo.cs. Кроме того, вам необходимо определить CODE_ANALYSIS как условные символы компилятора (Project > Properties > Build). Как только это произойдет, выполните полную перестройку проекта, и в следующий раз, когда вы запустите FxCop, ошибка должна быть перемещена в " Исключено в источнике " Вкладка.
Кроме того, один небольшой совет, но если вы имеете дело с большим количеством исключений FxCop, может быть полезно обернуть область вокруг них, чтобы вы могли убрать их с пути.