2009-03-27 2 views
9

Есть ли у кого-нибудь опыт внедрения FxCop в устаревший код? Мы хотели бы, чтобы наша сборка завершилась неудачей, если кто-либо вводит код, который нарушает правила. Но пока это невозможно, так как унаследованный код имеет более 9000 нарушений.Как вы начинаете с FxCop по устаревшему коду?

Единственный способ подавить ошибки, о которых я знаю, - это атрибут SuppressMessage, но это работает только на методах и GeneratedCodeAttribute. Этот последний можно использовать для классов и пространств имен (если я правильно помню), но не должен использоваться для не сгенерированного кода (см. here).

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

Любые идеи?

ответ

6

Я был в аналогичной ситуации. Я начал использовать FxCop в существующем проекте некоторое время назад, и с самого начала было довольно много ошибок. То, что я сделал, это отключить все правила, затем включить одну группу за раз, разрешив ошибки, когда я пошел.

Группы безопасности и эффективности - это хорошее место для начала - они помогли мне найти проблемы, о которых я раньше не знал. Некоторые из правил являются субъективными и могут не полностью применяться к вашему проекту, если вообще. Например, если интернационализация не является проблемой, оставьте эту группу выключенной. Если существуют определенные правила, которые не применяются к вам, например правила именования, затем отключите их.

Если вам удастся устранить набор ошибок для определенного правила, вы можете установить сборку сбоя, если эти правила будут нарушены в будущем. Таким образом, никакие новые ошибки не ползут.

Если это проект небольшого размера, просто зайдите в правило за раз, просмотрите релевантность/важность правила и исправите ошибки или отключите правило, если оно не применяется ,

2

Начните с вопроса: готовы ли вы и можете изменить устаревший код для соответствия правилам FxCop? Или сказать по-другому: это лучший способ провести время?

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

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

+0

+1 Согласованный, важный укус за раз. –

2

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

Для этого создайте проект в графическом интерфейсе FxCop, запустите анализ с помощью своих правил, а затем в окне просмотра результатов выберите нарушение, которое вы хотите игнорировать. Щелкните правой кнопкой мыши и выберите «Исключить». Выбранные предупреждения перейдут на вкладку «исключено в проекте». Когда вы будете готовы вернуться и исправить, выберите и нажмите «отметить как активный».

Эти исключения хранятся в файле .FxCop.

Тем не менее, я бы рекомендовал постепенно вводить правила, чтобы сгладить кривую обучения для всех.

+0

Как именно вы это делаете? Это опция «Не запускать сообщения против устаревшего кода, для которого исправление является нарушением изменений»? Кажется, он пропал в бета-версии FxCop 1.36 (который мы используем). И как FxCop знает, какие нарушения являются новыми, а какие старые? – Peter

+0

Я не вижу вариант, о котором вы говорите в моей версии FxCop (1.36, я считаю). Добавлено разъяснение о «Исключить в проекте» для публикации. –

0

Как насчет следующего подхода:

  1. Run FXCop со всеми правилами на которые имеют отношение к вашему проекту
  2. Сохранить результаты как базовой
  3. Разработка нового кода
  4. Run FxCop
  5. Убрать все результаты с базовой линии

это приведет к проверке fxcop на ваш новый код ....

Смежные вопросы