我们当前正在使用TFS 2008进行源代码控制和持续集成。

我们使用FXCop来检查性能和安全警告。建筑师或高级开发人员在冲刺结束时或交付之前运行FX Cop。

我们希望它作为CI的一部分运行,并且在出现警告时使构建失败,那么最好的方法是什么?

最佳答案

我一直在做类似的事情。即使这个问题有点老了,我希望它能对您有所帮助。

我像大多数人一样开始-通过创建一个称为FxCopCmd的构建后事件。

就我而言,我只需要一小部分代码,一些内置规则以及一些自定义规则(在.dll中)

为此,我使用了.fxcop项目文件-完全按照我的要求通过GUI对其进行配置,然后在构建后事件中将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结果(如果存在)。
  • 预构建事件已触发
  • (BUILD BEGINS)
  • 生成后事件被触发(运行FxCopCmd)
  • 构建完成后,如果有FxCop结果,则会引发错误。
  • (已完成构建过程)

  • 现在,如果FxCop分析生成了-例如-违反了4条规则,则您的构建将生成4条警告和1条错误。

    我希望这有帮助。

    09-28 01:01
    查看更多