通过FxCop来验证.NET编“.NET研究”码规范

简介:   最近研究了fxcop,有些心得,写出来分享一下。  FxCop介绍:  FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以定制自己的规则加入到这个引擎。

  最近研究了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 上海徐汇企业网站设计与制作e="color: #000000;"> 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上海闵行企业网站制作n style="color: #000000;"> 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 =上海徐汇企业网站制作/span> 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" 上海企业网站制作tyle="color: #0000ff;">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
上海闵行企业网站设计与制作yle="color: #008000;">'检查命名规范
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

目录
相关文章
|
4月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
6月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
177 0
|
5月前
|
开发框架 JSON .NET
|
6月前
|
JSON 数据格式 微服务
.NET下 支持大小写不敏感的JSON Schema验证方法
有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方面的标准,标准中都是大小写敏感的。在类似上述情况下,这给使用JSON Schema进行数据验证造成了困难。
|
7月前
|
机器学习/深度学习 算法 数据可视化
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
|
7月前
|
开发框架 JavaScript .NET
Asp.Net就业课之三验证控件
Asp.Net就业课之三验证控件
78 0
|
机器学习/深度学习 数据采集 存储
【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)
【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)
274 0
|
开发框架 JSON 算法
ASP.NET Core Web API之Token验证
ASP.NET Core Web API之Token验证
270 0
|
开发框架 安全 .NET
[牛腩]如何关闭.net framework4.0的请求验证
[牛腩]如何关闭.net framework4.0的请求验证
119 0
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
51 7