一起谈.NET技术,通过FxCop来验证.NET编码规范
2011-09-02 00:19
477 查看
最近研究了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、运行界面:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/15f2b9295b6cac6bcfecd6f02a574f52.jpg)
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定义成嵌入的资源。
2、在内库项目中引用Microsoft.Cci.dll和FxCopSdk.dll两个dll文件。添加一个类FunctionParametersCheck。继承BaseIntrospectionRule。
从上面代码可以看出,在类的构造函数中,关联了开始定义的XML文件。为了简便起见,这里只对string和int两种类型说明。
得到CustomRules.dll这个最终的输出。
使用:有两种方法使用。
1、使用fxcop工具,见前文
2、与vs2008集成,将这个dll放置到:VS2008安装路径\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop\Rules\目录下。选择一个项目,鼠标右键点击“运行代码分析”。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/e8eb8e8daa0f38d8375f2b43e04ddc56.png)
分析结果将显示在”错误列表”的”警告”标签页中。双击其中一项,即可定位到不符合规范的源代码行,即可进行代码调整。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/bd6224656afe5ffad0c198a60c6828b2.png)
将不符合规范的代码:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/f7b95e65f866ba7b927b4f78b16f42de.png)
调整为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/cb7bfe0a97defb62783ea425bb6b216b.png)
调试:可以看到我们建立的是类库项目,那么如何进行调试来进行开发呢。
1、修改类库项目的属性,将启动外部程序改成安装的FxcopCmd.exe:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/50deee7de90a7bc4886442ce3d6e034a.png)
2、将命令行参数修改成:out:"results.xml" /file:"C:\MyRules\TestProject\bin\Debug\TestProject.dll" /rule:"CustomRules.dll" /D:"C:\Program Files\Microsoft FxCop 1.36"
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/5f4d7ca6efc7a699b1175e15a79c42b9.png)
3、这样就可以调试了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/5b554fac3849a8015c18583a0f76cc0e.png)
总结:本文详细介绍了FxCop的使用过程,并通过一个示例来进行说明。FxCop是对中间语言进行检测的,所以这里的代码同样适用于C#。
代码:http://files.cnblogs.com/zhuqil/MyRules.rar
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、运行界面:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/15f2b9295b6cac6bcfecd6f02a574f52.jpg)
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\目录下。选择一个项目,鼠标右键点击“运行代码分析”。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/e8eb8e8daa0f38d8375f2b43e04ddc56.png)
分析结果将显示在”错误列表”的”警告”标签页中。双击其中一项,即可定位到不符合规范的源代码行,即可进行代码调整。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/bd6224656afe5ffad0c198a60c6828b2.png)
将不符合规范的代码:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/f7b95e65f866ba7b927b4f78b16f42de.png)
调整为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/cb7bfe0a97defb62783ea425bb6b216b.png)
调试:可以看到我们建立的是类库项目,那么如何进行调试来进行开发呢。
1、修改类库项目的属性,将启动外部程序改成安装的FxcopCmd.exe:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/50deee7de90a7bc4886442ce3d6e034a.png)
2、将命令行参数修改成:out:"results.xml" /file:"C:\MyRules\TestProject\bin\Debug\TestProject.dll" /rule:"CustomRules.dll" /D:"C:\Program Files\Microsoft FxCop 1.36"
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/5f4d7ca6efc7a699b1175e15a79c42b9.png)
3、这样就可以调试了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/28/5b554fac3849a8015c18583a0f76cc0e.png)
总结:本文详细介绍了FxCop的使用过程,并通过一个示例来进行说明。FxCop是对中间语言进行检测的,所以这里的代码同样适用于C#。
代码:http://files.cnblogs.com/zhuqil/MyRules.rar
相关文章推荐
- 一起谈.NET技术,验证.NET强命称的思路和实例
- 一起谈.NET技术,ASP.NET身份验证机制membership入门——项目
- 通过FxCop来验证.NET编码规范
- 一起谈.NET技术,Visual Studio 2010层架构验证的实现
- 一起谈.NET技术,JAVA与.NET的相互调用——通过Web服务实现相互调用
- 通过FxCop来验证.NET编码规范
- 通过FxCop来验证.NET编码规范
- 通过FxCop来验证.NET编“.NET研究”码规范
- 一起谈.NET技术,通过XOML或者XAML的方式创建和启动工作流
- 一起谈.NET技术,也谈ASP.NET 中的身份验证
- 一起谈.NET技术,ASP.NET MVC 通过 FileResult 向浏览器发送文件
- 通过FxCop来验证.NET编码规范
- 一起谈.NET技术,.NET中通过代理实现面向方面编程(AOP)
- 一起谈.NET技术,ASP.NET MVC验证框架中关于属性标记的通用扩展方法
- 一起谈.NET技术,提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
- 一起谈.NET技术,ASP.NET MVC 2 验证消息本地化策略扩展
- 一起谈.NET技术,通过自定义配置实现插件式设计
- 通过FxCop来验证.NET编码规范
- 一起谈.NET技术,创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
- 一起谈.NET技术,从数据到代码—通过代码生成机制实现强类型编程[下篇]