Исключение правила анализа кода в источнике - PullRequest
19 голосов
/ 30 августа 2008

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

Ответы [ 3 ]

18 голосов
/ 30 августа 2008

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

4 голосов
/ 30 августа 2008

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

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

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

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

2 голосов
/ 30 августа 2008

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

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

...