通过FxCop来验证.NET编码规范

最近研究了fxcop,有些心得,写出来分享一下。

FxCop介绍:

    FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以定制自己的规则加入到这个引擎。

    还有一款很流行的代码检测工具叫做StyleCop。之所以选择使用FxCop有两个原因,首先是StyleCop不支持VB.Net,而我们用VB.Net做后台开发的。第二是FxCop有非常强大的定制规则引擎的能力,这方面的能力StyleCop不如FxCop。

FxCop使用:

   1、下载FxCop

    最新版本的是FxCop 10.0。我是使用FxCop 1.36版的。FxCop 10.0可以到微软的官网下载。FxCop 1.36可以到床上等你上下载。微软的1.36这个版本的下载链接好像失效了。

   2、安装:略

   3、运行界面:

1)、打开FxCop程序,单击“Project”|“Add Targets”命令,添加待检查的程序集,可添加多个。
2)、打开FxCop程序,单击“Project”|“Add Rules”命令,添加自定义的规则,可添加多个。
3)、单击工具栏上的“Analyze”按钮,FxCop将自动执行检测,检测完毕后,结果将在右侧的列表中显示。单击某个列表项,FxCop下方将显示该结果的详细信息。如图上图所示。

这里使用的都是微软自带的规则,你还可以自定义规则,见下一节。

 FxCop自定义引擎:

    FxCop能实现自定义的引擎规则,这里我用个例子来说明。例子是参数命名使用Camel命名规范,格式为:对象类型+对象描述。

1、用vs2008创建一个 class library。fxcop还需要一个定义规则的XML文件。TypeName表示定义一规则的类名。Description表示错误信息。将此xml定义成嵌入的资源。

复制代码
   
   
<? xml version="1.0" encoding="utf-8" ?>
< Rules FriendlyName ="自定义规则" >

< Rule TypeName ="FunctionParametersCheck" Category ="参数命名规范" CheckId ="C10001" >
< Name > 参数命名请采用Camel命名规范 </ Name >
< Description >
参数命名请采用Camel命名规范,格式为:对象类型+对象描述。
</ Description >
< Url > www.cnblogs.com/zhuqil </ Url >
< Resolution >
函数{0}的参数{1}命名不符合Camel命名规范,格式为:对象类型+对象描述。
Integer int intQuantity
String str strFname
</ Resolution >
< Email > zhuqi0@126.com </ Email >
< MessageLevel Certainty ="80" > Warning </ MessageLevel >
< FixCategories > NonBreaking </ FixCategories >
< Owner > skylin </ Owner >
</ Rule >
</ Rules >
复制代码

2、在内库项目中引用Microsoft.Cci.dll和FxCopSdk.dll两个dll文件。添加一个类FunctionParametersCheck。继承BaseIntrospectionRule。

复制代码
   
   
' 功能: 参数命名请采用Camel命名规范
'
创建人: 朱祁林
'
创建时间:2010-12-07
'
修改人: 朱祁林
'
修改时间:2010-12-07

Imports Microsoft.FxCop.Sdk
Imports System
Namespace MySoftRules
Public Class FunctionParametersCheck
Inherits BaseIntrospectionRule
' Methods
Public Sub New ()
MyBase .New( " FunctionParametersCheck " , " CustomRules.CustomXMLRules " , GetType (FunctionParametersCheck).Assembly)
End Sub

Public Overrides Function Check( ByVal member As Member) As ProblemCollection
Dim method As Method = TryCast(member, Method)
If (( Not method Is Nothing ) AndAlso (method.DeclaringMember Is Nothing )) Then
Dim i As Integer
For i = 0 To method.Parameters.Count - 1
' true:找到不符合规范的参数,false表示没有找到不符合规范的参数
Dim blnFoundAddString As Boolean = False
Dim strFullType As String = method.Parameters.Item(i).Type.FullName
Dim strType As String = strFullType.Substring((strFullType.LastIndexOf( " . " ) + 1 ), ((strFullType.Length - strFullType.LastIndexOf( " . " )) - 1 ))
Dim strName As String = method.Parameters.Item(i).Name.Name
If strType.ToLower() = " string " Then
blnFoundAddString
= CheckField(strName, " str " )
ElseIf strType.ToLower() = " int32 " Then
blnFoundAddString
= CheckField(strName, " int " )
End If
If blnFoundAddString Then
Dim resolu As Resolution = MyBase .GetResolution(method.ToString, strName)
MyBase .Problems.Add( New Problem(resolu))
End If
Next i
End If
Return MyBase .Problems
End Function
' 检查命名规范
Private Function CheckField( ByVal strName As String , ByVal strAbbreviation As String ) As Boolean
Dim intLength As Integer = strAbbreviation.Length
Try
If (strName.Substring( 0 , intLength) <> strAbbreviation) Then
Return True
End If
If Char .IsLower(strName.Chars(strAbbreviation.Length)) Then
Return True
End If
Catch obj1 As Exception
Return True
End Try
Return False
End Function

End Class
End Namespace
复制代码

从上面代码可以看出,在类的构造函数中,关联了开始定义的XML文件。为了简便起见,这里只对string和int两种类型说明。

得到CustomRules.dll这个最终的输出。

使用:有两种方法使用。

1、使用fxcop工具,见前文

2、与vs2008集成,将这个dll放置到:VS2008安装路径\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop\Rules\目录下。选择一个项目,鼠标右键点击“运行代码分析”。

分析结果将显示在”错误列表”的”警告”标签页中。双击其中一项,即可定位到不符合规范的源代码行,即可进行代码调整。

将不符合规范的代码:

调整为:

 

调试:可以看到我们建立的是类库项目,那么如何进行调试来进行开发呢。

1、修改类库项目的属性,将启动外部程序改成安装的FxcopCmd.exe:

2、将命令行参数修改成:out:"results.xml" /file:"C:\MyRules\TestProject\bin\Debug\TestProject.dll" /rule:"CustomRules.dll" /D:"C:\Program Files\Microsoft FxCop 1.36"

3、这样就可以调试了。

 

总结:本文详细介绍了FxCop的使用过程,并通过一个示例来进行说明。FxCop是对中间语言进行检测的,所以这里的代码同样适用于C#。

代码:http://files.cnblogs.com/zhuqil/MyRules.rar

作者:朱祁林
出处:http://zhuqil.cnblogs.com 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值