公司用的同样的方式进行的编码规范,园友已经写好,直接转载过来。

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://www.cnblogs.com/zhuqil/archive/2010/12/07/FxCop.html

通过FxCop来验证.NET编码规范相关推荐

  1. Discuz代码研究-编码规范

    来源:http://www.cnblogs.com/janas/archive/2013/08/20/3271408.html Discuz中的编码规范很值得PHP开发人员借鉴.里面既介绍了编码时代码 ...

  2. php 编码规范哪些_整理了一份比较全面的PHP开发编码规范.

    这些年来多从事Linux下PHP和C相关的开发,带过很多项目和团队,下面是根据经验整理的PHP编码规范,可以用作给大家的范例和参考,根据需要进行取舍和修改! (可能最新的一些php5的规范不够完整,今 ...

  3. Vue.js 组件编码规范

    目标 本规范提供了一种统一的编码规范来编写 Vue.js 代码.这使得代码具有如下的特性: 其它开发者或是团队成员更容易阅读和理解. IDEs 更容易理解代码,从而提供高亮.格式化等辅助功能 更容易使 ...

  4. 【转】嵌入式软件:C语言编码规范

    引  言 嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积和功耗严格要求的专门计算机系统.嵌入式技术并不是一个独立的学科,它是伴随着微电子技术和计算 ...

  5. 使用husky + lint-staged助力团队编码规范

    使用husky + lint-staged助力团队编码规范 写在前面 了解 githooks husky 钩子中执行多个命令 hook 拦截 lint-staged mrm 关于 prettier 的 ...

  6. 9.9的阿里巴巴编码规范考试竟如此简单?搜集试题分享!让我们一起守护开发规范!

    很早就买了阿里巴巴编码规范的考试,但是因为那一段时间太忙了,居然就把自己买的这个考试给忘记了,就在上周手机突然收到短信提醒我阿里巴巴编码规范再有30天就要到期了.吓得我赶紧趁着上班之余把手册看看,手册 ...

  7. 【安全开发】IOS安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  8. Android安全编码规范

    1.目的 为使系统开发人员能够编写符合安全要求的代码,以降低代码安全漏洞,减少代码被利用的可能性,从而提升各系统安全水平,符合国家安全合规性要求,保障产品安全稳定运营以及信息安全,特制定本规范. 2. ...

  9. 公司让我编写一套自己的【Java 编码规范】作为员工季度考核标准?!参照Alibaba

    目录 一.编码规范 (一)命名风格 (二)常量定义 (三)代码格式 (四)OOP规范 (五)集合处理 (六)并发处理 (七)控制语句 (八)注释规范 (九)其它 二.SVN操作规范 三.异常日志 (一 ...

最新文章

  1. 运维人员处理云服务器故障的方法总结
  2. 实例:手写 CUDA 算子,让 Pytorch 提速 20 倍
  3. 全职奶爸的一年深度学习之路:从零基础到成为研究科学家
  4. Dataguard failover切换应用redo操作
  5. 【Kali渗透全方位实战】使用Nmap进行端口探测-发现脆弱站点
  6. 建表时数据库建议使用 utf8mb4字符集
  7. css3中的 @Keyframes
  8. mysql数据库+ssh框架_SSH框架+Mysql数据库开发java web会员积分消费管理系统
  9. SQL Server 2005: Constraints
  10. Java集合:Collection接口
  11. 性能测试--jmeter中http的请求默认值【6】
  12. C#实现Excel导出
  13. telnet测试端口
  14. 屏幕共享的实现与应用
  15. 活动图与流程图区别以及各自画法
  16. 文件上传4-uploads靶场6-10
  17. python 生成有效的四要素
  18. 解决云帆小说下载阅读器不能下载https网址的问题
  19. 2012蓝桥杯【初赛试题】手机尾号
  20. 【UFUN开发板评测】小巧而不失精致,简单而不失内涵——uFun开发板开箱爆照...

热门文章

  1. nacos enablediscoveryclient_Nacos入门指南03 服务发现实践
  2. html js 添加数据类型,js数据类型判断和转换
  3. Apache配置文件的帮助查询
  4. 内存映射IO (MMIO) 简介
  5. mysql 的文件介绍_mysql 数据文件介绍
  6. python入门教程收藏_python入门教程:超详细保你1小时学会Python,快来收藏看看...
  7. linux python代码编辑器,Linux上的Python编辑器
  8. php代码审计2全局变量和超全局变量
  9. RxJava系列4(过滤操作符)
  10. 2017春季华为实习生编程题