代码审查工具Sonar(二)-- 分析c#代码

Sonar的官网上列出了直接有plugin支持的第三方C#代码分析工具,参见http://docs.codehaus.org/display/SONAR/C%23+Ecosystem+Installation+Guide,下面就来逐一介绍:

1. FxCop : 微软的代码分析工具,以微软内部使用的.NET编码规范为参照,找出源代码中潜在的设计和编写缺陷。FxCop使用一套缺省的检测规则,不过用户也可以使用FxCop SDK添加定制的其他规则。FXCop分析的是编译好的代码,例如*.dll文件。FxCop集成在win7 SDK中,要想安装,必须先下载"Microsoft Windows SDK for windows 7 and .NET Framework 4"的ISO文件,下载链接:http://www.microsoft.com/en-us/download/details.aspx?id=8442#instructions。当然Win7系统会自带这个SDK,就不用下载了。不过,如果只是为了装FxCop,我们没有必要安装ISO文件里的所有内容,只要你安装过免费的解压工具7-zip,就可以打开ISO文件并且只是解压Setup\WinSDKNetFxTools\cab1.cab,然后用7-zip打开cab1.cab并解压文件WinSDK_FxCopSetup.exe_all_enu_1B2F0812_3E8B_426F_95DE_4655AE4DA6C6,并将其重命名为WinSDK_FxCopSetup.exe,这个文件就是FxCop的安装包。

2. StyleCop : 也是微软的代码分析工具,并以微软内部使用的.NET编码规范为参照。和FxCop不同的是,它只进行代码的静态扫描,直接分析源代码。StyleCop是Sonar的C# Plugin内嵌的组件,不用另外安装。

3. Gendarme : 是.Net应用程序和库文件的代码检查工具,它参照的是Cecil库里的标准,里面的内容不是编码规则,而是已知的错误编码方式,坏的编写习惯,影响性能的代码类型等,简单说,Gendarme检查的目的就是让我们不要再反复去犯前辈们已经犯过的错误。Gendarme也是Sonar的C# Plugin内嵌的组件,不用另外安装。

4. PartCover/OpenCover/NCover/JetBrains dotCover : 这几个工具都是计算测试覆盖率的,大家看着哪个顺眼,装一个就行了。我们用的是免费的PartCover。

5. Gallio : 和4的Cover工具一起执行Unit Test或者Integration Test的。

注:如果运行代码分析的是64位操作系统,需要将PartCover和Gallio设置为32位,使用的工具就是windows自带的应用程序CorFlags.exe。运行如下命令进行设置:

path=C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin;%PATH%
cd "C:\Program Files (x86)\PartCover\PartCover .NET 4.0"
corFlags.exe PartCover.exe /32BIT+ /Force

cd "C:\Program Files (x86)\Gallio\bin"
corFlags.exe Gallio.Echo.exe /32BIT+ /Force

6. NDeps : 用来分析类和组件等的依赖关系,不用另外安装。

下面还需安装一个关键组件:Sonar C# Plugin。和其他所有Sonar plugin一样,安装过程可以直接在Sonar中点击执行。以管理员的身份登录Sonar,缺省账号是admin/admin,点击右上角的"Settings",在左边的列表中选择"Update Center",选择"Available Plugins",选择安装C# 和.Net plugin。

代码审查工具Sonar(二)-- 分析c#代码_第1张图片

同样是管理员身份,进入页面Settings->General Settings,将与.Net和C#相关的目录里的属性设好,最常用的是安装路径,比如.NetFramework,FxCop, Gallio和xxCover的安装路径,版本号,Gallio使用的是哪个Cover工具等。此处不一一列举。

代码审查工具Sonar(二)-- 分析c#代码_第2张图片

要使用Sonar-runner分析一个C#工程,需要三步:

1. 编译(compile)你的代码。FxCop/Gendarme/Gallio/NDeps都是分析编译过(debug版)的代码。

2. 创建一个名为sonar-project.properties的文件,通常把它和solution文件(.sln)放在同一个目录中。这一步是重点,所有的分析设置都体现在这个文件里,更详细的内容可以参照http://docs.codehaus.org/display/SONAR/Running+an+Analysis+on+a+C%23+Solution

3. 打开命令行窗口cmd.exe,将当前路径设在文件sonar-project.properties所在的位置,运行命令sonar-runner就可以完成分析源代码的过程。如果运行失败,可以用sonar-runner -X来查看详细的出错信息。

分析完成后,就可以打开web浏览器,输入http://your-sonar-server:9000查看结果。

最后列举几个我们在运行sonar-runner时遇到的错误和解决方法:

a. 运行FxCop出错:could not find reference system.windows, version=2.0.5.0。

这是FxCop在查找引用时没找到匹配项,所以一直追溯到了最original的版本,解决方法是到FxCop的安装目录下,打开FxCop.exe.config文件,将AssemblyReferenceResolveMode的值设为StrongNameIgnoringVersion,也就是接受同名而版本略高的库文件来匹配相关的reference。文件FxCopCmd.exe.config也做同样的修改。

b. 运行NDeps出错:DependencyParser has stopped working

在debug模式下(-X)发现是因为NDeps的缺省timeout设置是10分钟,到时间就会强杀分析进程。解决方法是在sonar-project.properties里增加一行,sonar.ndeps.timeoutMinutes=10000

c. 运行NDeps出错:System.NotSupportedException: Version not supported: 5.0.5.0

当分析silverlight project时出现这个错误,我们用的版本是silverlight 5。很不幸,目前的NDeps版本不支持silverlight 5,我们只好跳过NDeps检查,在文件sonar-project.properties里设置sonar.ndeps.mode=skip,等待有支持的版本出现时再打开。

你可能感兴趣的:(代码审查工具Sonar(二)-- 分析c#代码)