Я работал над чем-то подобным. Несмотря на то, что этот вопрос немного устарел, я надеюсь, что он вам поможет.
Я начал, как и большинство, с создания события после сборки, которое вызывает 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>
Общий поток такой:
- (ЗАПУСКАЕТСЯ ПРОЦЕСС СТРОИТЕЛЬСТВА)
- Перед началом сборки предыдущие результаты FxCop (если они есть) очищаются.
- Запускается событие перед сборкой
- (СТРОИТЕЛЬСТВО НАЧИНАЕТСЯ)
- Запускается событие после сборки (которое запускает FxCopCmd)
- После завершения пост-сборки, если есть результаты FxCop, возникает ошибка.
- (ПРОЦЕСС СТРОИТЕЛЬСТВА ЗАВЕРШЕН)
Теперь, если анализ FxCop сгенерирует, например, 4 нарушения правил, ваша сборка сгенерирует 4 предупреждения и 1 ошибку.
Надеюсь, это поможет.
person
Kevin Fairchild
schedule
22.12.2010