Как завершить сборку TFS на основании предупреждения FXCop

В настоящее время мы используем TFS 2008 для управления версиями и непрерывной интеграции.

Мы используем FXCop для проверки производительности и предупреждений о безопасности. Архитектор или старший разработчик запускает FX Cop в конце спринта или перед поставкой.

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


person Shiraz Bhaiji    schedule 24.08.2010    source источник


Ответы (3)


Я работал над чем-то подобным. Несмотря на то, что этот вопрос немного устарел, я надеюсь, что он вам поможет.

Я начал, как и большинство, с создания события после сборки, которое вызывает FxCopCmd.

В моем случае мне нужно было только небольшое подмножество кода, некоторые встроенные правила, а также некоторые настраиваемые правила (в .dll)

Я использовал для этого файл проекта .fxcop - настроил все так, как я хотел, через графический интерфейс, а затем указал FxCopCmd на файл проекта в событии после сборки.

По большей части это сработало отлично, но нарушения правил выступали только как предупреждения. Параметр «Обрабатывать предупреждения как ошибки», похоже, к этому не применим, поэтому мне пришлось придумать другое решение.

Что в конечном итоге сработало для меня лучше всего, было основано на сообщении в блоге, на которое я наткнулся.

Я изменил файл проекта, чтобы добавить два новых события.

У меня есть несколько дополнительных параметров и прочего для FxCop, но суть в следующем:

   1: <PropertyGroup>
   2:   <FxCopResults>$(ProjectDir)obj\$(Configuration)\FxCopResults.xml</FxCopResults>
   3:   <PostBuildEvent>"%25ProgramFiles%25\Microsoft FxCop 10.0\FxCopCmd.exe" /file:"$(TargetPath)" /console /out:"$(ProjectDir)obj\$(ConfigurationName)\FxCopResults.xml"</PostBuildEvent>
   4: </PropertyGroup>
   5: <Target Name="BeforeBuild">
   6:   <Delete Files="$(FxCopResults)" ContinueOnError="true" />
   7: </Target>
   8: <Target Name="AfterBuild">
   9:   <Error Text="One or more FxCop warnings occurred." Condition="Exists('$(FxCopResults)')" />
  10: </Target>

Общий поток такой:

  1. (ЗАПУСКАЕТСЯ ПРОЦЕСС СТРОИТЕЛЬСТВА)
  2. Перед началом сборки предыдущие результаты FxCop (если они есть) очищаются.
  3. Запускается событие перед сборкой
  4. (СТРОИТЕЛЬСТВО НАЧИНАЕТСЯ)
  5. Запускается событие после сборки (которое запускает FxCopCmd)
  6. После завершения пост-сборки, если есть результаты FxCop, возникает ошибка.
  7. (ПРОЦЕСС СТРОИТЕЛЬСТВА ЗАВЕРШЕН)

Теперь, если анализ FxCop сгенерирует, например, 4 нарушения правил, ваша сборка сгенерирует 4 предупреждения и 1 ошибку.

Надеюсь, это поможет.

person Kevin Fairchild    schedule 22.12.2010

Вы можете ознакомиться с функциями анализа кода в Visual Studio, который поддерживается для использования в среде непрерывной интеграции.

person Rowland Shaw    schedule 24.08.2010
comment
Разве это не применимо только к версиям VS Premium или Ultimate? - person Kevin Fairchild; 22.12.2010

Предполагая, что вы строите с помощью MSBuild и обычных проектов / решений, вы можете настроить FXCop для работы в составе каждой сборки (как клиентской, так и серверной). В диалоговом окне свойств вашего проекта перейдите на вкладку «Анализ кода». Обратите внимание, что это можно установить отдельно для сборок отладки и выпуска, поэтому вы можете просто установить их на ошибки для сборок выпуска, если это облегчит жизнь вашим разработчикам.

Эти настройки FXCop позволяют определить, что нарушения будут отображаться в сборке как ошибки, а не как предупреждения. Вы также можете включить политику TFS, которая требует, чтобы анализ кода выполнялся с определенным набором правил до того, как проверка станет действительной - это сэкономит вам несколько красных сборок, заставляя разработчиков исправлять нарушения перед проверкой.

Я действительно рекомендую включить все эти вещи - если вы стремитесь к этому уровню качества (что неплохая идея), хорошо делать как можно больше перед проверкой.

person Dan Puzey    schedule 24.08.2010