使用VS 2010 Professional执行.NET 4.0静态代码分析(FxCop)

时间:2010-10-06 12:02:45

标签: visual-studio-2010 msbuild code-analysis fxcop

我有VS 2010 专业(与 Premium 不同,包含对IDE内代码分析配置的访问权限),以及C#4解决方案包含许多项目。我想将静态代码分析作为解决方案编译的一部分。

我在SO和Google的帮助下确定的可能方式是:

  • 编辑解决方案中的每个.csproj,以包含对独立FxCop 10的调用作为构建后事件。优点:每次编译时都会重建每个重建的项目。缺点:必须采取额外措施以确保新项目具有此指定

  • 创建一个新项目,或者根据项目依赖性识别始终构建的现有项目。给(仅)项目一个Post-build事件,该事件在(公共)输出文件夹中的所有程序集上运行FxCop。优点:只有一个文件需要更新,未来项目未被分析的可能性较小。缺点:构建依赖关系的变幻莫测可能意味着这实际上不起作用

  • 使用在任何构建后运行FxCop的加载项或宏更新所有开发人员的VS实例。根本不喜欢这个想法。

还有其他选择,明显优于上述任何选项吗?我需要注意哪些警告或观察才能完成上述工作之一?

我还希望FxCop作为构建服务器上MSBuild 4.0驱动的构建的一部分运行。哪个选项允许我在桌面编译和bulid服务器编译之间重用代码分析规则集?


我已经阅读了相关但不完全相同的已有问题,包括:

6 个答案:

答案 0 :(得分:7)

要将FxCop集成为构建scipt(MSBuild)的一部分,我使用MSBuild.Community.Tasks中的FxCop任务。使用FxCop我创建了一个FxCop项目(FxCopProject.FxCop),它定义了要使用的规则和要检查的程序集。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup>
  <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\vendor\MSBuild.Community.Tasks.v1.3.0.504</MSBuildCommunityTasksPath>
  <FxCopDir>vendor\Microsoft Fxcop 10.0</FxCopDir>
 </PropertyGroup>
 <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>

 <Target Name='FxCopReport'>
  <FxCop
   ToolPath='$(FxCopDir)'
   ProjectFile='FxCopProject.FxCop'
   AnalysisReportFileName='FxCopReport.xml'
  />
 </Target>
</Project>

答案 1 :(得分:3)

我使用Hudson作为构建服务器,在构建.NET应用程序后执行代码分析。为了将其用于此目的,您需要安装两个插件:

  • MSBuild插件用于构建.NET应用程序。
  • Violations插件,用于报告代码分析结果并支持FxCop和StyleCop。

Hudson需要配置为执行FxCop和StyleCop,但使用批处理文件并不是很困难。好处是不需要配置任何项目文件,因为代码分析将在外部执行;也就是说,不是通过Visual Studio。

您可以将Hudson配置为执行代码分析作为日常任务,甚至是对应用程序的每次更改。然后,开发团队中的每个人都可以通过Hudson查看代码分析结果,以确定他们是否犯了任何违规行为。

答案 2 :(得分:2)

我暂时没有使用FxCop,但是如果你有很多项目,我怀疑每个项目运行一次,而不是一次只运行一次,这将是痛苦的。您可以尝试(或至少从一开始)this之类的东西。简而言之,您有一个超级项目,目标依赖于构建整个解决方案,然后运行FxCop(或单元测试等)。您可以使用解决方案资源管理器中的批处理文件调用超级项目。

它类似于您的第二个建议,但不会依赖构建顺序,也不需要摆弄新项目。不幸的是,它目前的化身打破了VS内部构建的正常捷径,并且可能很容易意外绕过,但可能会对其进行改进。

使用MSBuild目标运行FxCop,而不是构建后步骤,它也可能更清晰,更好地与VS集成。

答案 3 :(得分:1)

FxCop的替代方法是使用允许编写Code Rules over C# LINQ Queries (namely CQLinq)的工具NDepend。 免责声明:我是该工具的开发人员之一

默认情况下会提出超过200 code rules的内容。由于众所周知的 C#LINQ语法,自定义现有规则或创建自己的代码规则非常简单。

可以live in Visual Studio验证规则generated HTML+javascript report并在构建流程时验证规则。

答案 4 :(得分:0)

创建自定义构建活动(基于我们通过构建定义设置的属性运行):

  1. 我的自定义活动会搜索根文件夹下的所有* .csproj文件。
  2. 更新所有csproj文件以添加属性“

  3. 保存csproj文件。

  4. 现在这将导致代码分析在编译时运行。
  5. 这意味着我们可以控制何时需要运行代码分析。我们不必每次构建代码时都运行它。

    请注意,您没有高级VS,但您可以按照相同的过程在构建期间更新csproj文件的构建后事件。

答案 5 :(得分:0)

我知道这是一个老问题,但IMO的最佳选择是使用SonarQube和C#插件进行分析。这将FxCop作为分析选项之一处理,并且能够进行StyleCop和ReSharper分析(使用免费的命令行运行程序)并编译成一个Web界面。

设置第一个项目需要一些时间,但设置后续项目非常相似,可以由CI服务器触发。