代码之家  ›  专栏  ›  技术社区  ›  Shiraz Bhaiji

如何基于FXCop警告失败TFS构建

  •  5
  • Shiraz Bhaiji  · 技术社区  · 15 年前

    我们使用FXCop检查性能和安全警告。架构师或高级开发人员在sprint结束或交付之前运行fxcop。

    我们希望它作为CI的一部分运行,如果出现警告,则使生成失败,最好的方法是什么?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Kevin Fairchild    15 年前

    我一直在做类似的事情。尽管这个问题有点老了,我还是希望它能对你有所帮助。

    我一开始和大多数人一样--通过生成一个调用FxCopCmd的post-build事件。

    在我的例子中,我只需要代码的一小部分,一些内置规则,还有一些自定义规则(在.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>
    

    一般流程如下:

    1. (生成过程已触发)
    2. 在构建开始之前,将清除以前的FxCop结果(如果存在)。
    3. 触发预生成事件
    4. (生成开始)
    5. 触发生成后事件(运行FxCopCmd)
    6. (构建过程已完成)

    现在,如果FxCop分析生成了(例如)4个规则冲突,那么您的构建将生成4个警告和1个错误。

        2
  •  6
  •   Rowland Shaw    15 年前
        3
  •  3
  •   Dan Puzey    15 年前

    假设您是通过MSBuild和常规项目/解决方案进行构建,那么可以将FXCop配置为作为每个构建的一部分运行(包括客户端和服务器)。在项目的属性对话框中,查看“代码分析”选项卡。请注意,这可以为调试版本和发布版本分别设置,因此您可以为发布版本将它们设置为errors,如果这样可以简化开发人员的工作。

    这些FXCop设置允许您定义冲突在生成中显示为错误而不是警告。您可能还希望启用TFS策略,该策略要求在签入有效之前使用已定义的规则集运行代码分析—这将通过强制开发人员在签入之前修复冲突来节省一些红色构建。

    我建议把所有这些东西都打开-如果你的目标是这样的质量水平(这不是个坏主意),它是好的,尽可能多地做你可以预先检查。