静态代码审查工具FxCop插件开发(c#)
FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范。FxCop默认提供的是微软默认的审查规则,而且该规则符合《Framework DesignGuidelines》里面大部分的设计规范。因为FxCop默认提供的规范比较严格所以对开发人员的要求也比较高, 而且每个公司都有自己的一套规范,所以默认的规范并不能满足我们的要求,这就需要我们自己开发插件来进行自定义规则,而且FxCop已经集成到了Visual Stduio中,所以我们开发的插件也能在Visual Stduio运行。
附:MSDN关于FxCop的介绍:http://msdn.microsoft.com/en-us/library/bb429476(v=vs.80).aspx
FxCop10.0官方下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=6544
官方需要安装几百兆的SDK ,这里提供了FxCop10.0 独立安装包 :http://download.csdn.net/detail/zhengwen12/7061639
一、使用FxCop
1.FxCop软件使用非常简单,开发人员只需要3分钟就可以搞定(其中2分钟是下载软件时间)。

注意:1.上图中Rules 选项卡的内容代表的是工具提供的默认规则,规则描述单击鼠标就能看见。
2. 如果在实际开发中使用工具提供的默认规则 最好去掉(如果无区域文化等特殊要求) Globalization Rules 这个审查规则。
二、开发FxCop 插件
由于目前官方文档没有介绍自定义规则和相关的API,所以只能靠“猜” ,这是目前找到的关于开发vb.net自定义规则的文章:http://www.cnblogs.com/zhuqil/archive/2010/12/07/FxCop.html
所有的规则都是以dll的形式存在,其中默认规则是在FxCop的安装目录下 如:”D:\Program Files (x86)\Microsoft Fxcop 10.0\Rules” 所以我们需要什么规则 ,只要找到默认规则的DLL反编译 然后改改就可 以了。例如:所有接口的命名 必须以“I”开头。下面就以此为例进行讲解。
1. 在VS中新建名为 MyRules的c#类库 ,在FoxCop的安装目录找到Microsoft.Cci.dll和FxCopSdk.dll 并添加到项目引用 ,添加一个名为MyCheckRules的类 并继承自BaseIntrospectionRule基类 并覆盖 public override ProblemCollection Check(TypeNode type)方法。代码如下:
using Microsoft.FxCop.Sdk;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace MyRules
{
public class InterfacesNamingStandard : BaseIntrospectionRule
{
public InterfacesNamingStandard()
: base("InterfacesNamingStandard", "MyRules.InterfacesNamingStandardDesign", typeof(InterfacesNamingStandard).Assembly)
{
} public override ProblemCollection Check(TypeNode type)
{
if (type == null)
{
return null;
}
if ((type is InterfaceNode))
{
if (type.ToString().StartsWith("I"))
{
return null;
}
Problem item = new Problem(base.GetResolution(new object[] { type }));
base.Problems.Add(item);
}
return base.Problems;
}
}
}
注意:1.基类构造函数第一个参数为当前定义的类名 (InterfacesNamingStandard) ,第二个参数为 程序集名+XML的文件名(XML文件在第2步定义)
2.添加一个名为InterfacesNamingStandardDesign的XML文件,并将属性"生成操作" 改为 “嵌入的资源” 。该XML文件表示的是 当FxCop代码审查未通过时显示的相关提示信息 如未通过的原因,解决方案等。文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Rules FriendlyName="自定义规则">
<Rule TypeName="InterfacesNamingStandard" Category="Microsoft.Design" CheckId="C0001">
<Name>
Interface must be Started With "I"
</Name>
<Description>
Interface must be Started With "I"
</Description>
<Url>
http://www.cnblogs.com/
</Url>
<Resolution>
Define a new interface to replace {0}.
</Resolution>
<Email />
<MessageLevel Certainty="90">
Warning
</MessageLevel>
<FixCategories>
Breaking
</FixCategories>
<Owner />
</Rule>
</Rules>注意:1.Rule节点的TypeName属性值必须为第1步定义的类名 .
3.使用FxCop加载生成的DLL 如下图:
4.Visual Stduio 2013中使用开发好的FxCop插件
①最简单的使用方法是:找到Visual Stduio 2013 中FxCop目录 例如:“D:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\Rules”
删除里面的所有的DLL 然后加入自己开发的插件MyRules.dll. 然后选择项目属性->代码分析->运行此规则集->选择Microsoft的所有规则,设置完成后运行代码分析,如下图:
②如果想保留默认的规则 需要我们根据 D:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\Rule Sets 下的规则集文件格式进行定义,该方法目前还没有进行尝试。
5.关于调试FxCop插件
①可以使用附加到FxCop进程的方式。
②使用FxCop提供的命令行工具 在VS里设置为外部启动项 具体参考 http://www.cnblogs.com/zhuqil/archive/2010/12/07/FxCop.html。
最后,由于这方面资料比较少,所以一些规则和API使用方式都是通过Reflector反编译得来,期间可能会遇到很多错误。这就需要我们不断的去尝试。
静态代码审查工具FxCop插件开发(c#)的更多相关文章
- 【工利其器】Android Lint篇——为Android量身定做的静态代码审查工具
前言 我们在进行代码优化的时候,往往是通过开发者的经验来判断哪些代码可能存在潜在问题,哪些资源的使用不合规范等.实际上Android SDK提供了一款功能非常强大的工具,来帮助开发者自动检测代码的质量 ...
- 代码审查工具StyleCop
“代码审查”或是“代码评审”(Code Review),这是一个流程,当开发人员写好代码后,需要让别人来review一下他的代码,这是一种有效发现BUG的方法.由此,我们可以审查代码的风格.逻辑.思路 ...
- Java静态检测工具/Java代码规范和质量检查简单介绍(转)
静态检查: 静态测试包括代码检查.静态结构分析.代码质量度量等.它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码检查代码检查包括代码走查.桌面检查.代码审查等,主要检查代码 ...
- 代码审查工具之PMD操作指南
上周客户要求对OA系统的代码质量进行了一个整体审查,并且要出一份报告给领导. 为此花了半天时间把代码审查工具PMD琢磨了下,现将具体操作步骤描述如下,以供大家参考! 1 前言 质量是衡量一个软件是否成 ...
- [转载] Jupiter代码审查工具使用参考
转载自http://blog.csdn.net/jemlee2002/article/details/5715355 一. Jupiter 是什么? 这里的 Jupiter 是一个开源的代 ...
- Shell学习---Shell脚本的静态检查工具shellcheck
Shell脚本的静态检查工具shellcheck ubuntu下 apt install shellcheck ,即可安装shellcheck.写完shell脚本,记得用它检查一下,能给你点建议的.要 ...
- React Native工程中TSLint静态检查工具的探索之路
建立的代码规范没人遵守,项目中遍地风格迥异的代码,你会不会抓狂? 通过测试用例的程序还会出现Bug,而原因仅仅是自己犯下的低级错误,你会不会抓狂? 某种代码写法存在问题导致崩溃时,只能全工程检查代码, ...
- 代码审查工具Sonarqube安装
前言:在项目开发当中,完成需求并上线是一件很开心的事情,但为了能按时上线功能不得不为了完成功能而写代码,写的时候觉得先把功能上了以后再回头优化此处代码,但真正上线之后你就会发现你再也不想去修改之前遗留 ...
- Jupiter Code Review Reference -- Jupiter代码审查工具使用参考
Jupiter Code Review Reference -- Jupiter代码审查工具使用参考 (修改版) 原创 2010年07月06日 10:43:00 标签: 审查 / reference ...
随机推荐
- KnockoutJS 3.X API 第三章 计算监控属性(1) 使用计算监控属性
计算监控属性(Computed Observables) 如果你有一个监控属性firstName,和另一个lastName,你要显示的全名?可以使用计算监控属性来实现-它依赖于一个或多个其他监控属性, ...
- C++学习之重载、覆盖与隐藏
MaiziTest12.cpp : 定义控制台应用程序的入口点. 1.重载特征 1)相同的范围(在同一个类中): 2)函数名相同: 3)参数不同: 4)virtual关键字可有可无. 2.覆盖 指的是 ...
- 在configure distribution时遇到错误,不能打开sql agent
今天在配置Distribution时,遇到一个错误,不能打开sql agent,详细错误信息如下: SQL Server blocked access to procedure 'dbo.sp_set ...
- SQL Pass北京举办1周年活动(本次活动特别邀请到了来自微软的SQL Server大师何雷谈数据库职业规划)
地点:北京微软(中国)有限公司[望京利星行],三层308室 时间:2013年 12 月28日 13:30-16:30 SQL PASS 北京QQ群号:2435349 新浪微群地址:http://q.w ...
- mongodb 关系、引用、覆盖索引查询
一.关系 MongoDB 的关系表示多个文档之间在逻辑上的相互联系.文档间可以通过嵌入和引用来建立联系.MongoDB 中的关系可以是:1对1,1对多,多对1,多对多. 一个用户可以用多个地址,这是典 ...
- Hessian 原理分析--转
原文地址:http://blog.csdn.net/zhtang0526/article/details/4788879 一. 远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传 ...
- 自制jquery可编辑的下拉框
昨天看到QQ登录的时候,可以选择以前登录过的账户,这个东西也可以在网站登录的时候用到,所以我就想做一个这样的插件:在网上查了很多,没有找到合适自己的,所以决定自动制作一个. 原理就是一个textbox ...
- 测试servlet学习笔记
操作方法: 1.新建工程: File——>new——>Java Project——>TestServlet(工程名称)——>Finish. 2.加载servlet-api.ja ...
- android gridview几个重要属性(android:listSelector自带内部padding分析)
一.android:scrollbarStyle 决定状态条的位置 常用属性outsideOverlay,滚动条在最外层,gridview设置的padding在滚动条的内侧 二.andr ...
- velocity分页模板
以前用后台java拼接分页代码,不利于修改.找到一份velocity模板. <!-- 分页模板 --> #macro(pager $url $pager) <url class=&q ...

