静态代码审查工具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 ...
随机推荐
- JS中的匿名函数
整理自:http://www.cnblogs.com/playerlife/archive/2012/10/17/2727683.html 一.什么是匿名函数? 在Javascript定义一个函数一般 ...
- KendoUI系列:MultiSelect
1.基本使用 1>.创建Input <link href="@Url.Content("~/Content/kendo/2014.1.318/kendo.common. ...
- hdu3339 In Action(Dijkstra+01背包)
/* 题意:有 n 个站点(编号1...n),每一个站点都有一个能量值,为了不让这些能量值连接起来,要用 坦克占领这个站点!已知站点的 之间的距离,每个坦克从0点出发到某一个站点,1 unit dis ...
- Java多线程系列--“JUC原子类”01之 框架
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...
- 云计算之路-阿里云上:消灭“黑色n秒”第三招——禁用网卡的TCP/IP Offload
程咬金有三板斧,我们有三招.在这篇博文中我们要出第三招,同时也意味着昨天在“希望的田野”上的第二招失败了. 前两招打头(CPU)不凑效,这一招要换一个部位,但依然要坚持攻击敌人最弱(最忙最累)部位的原 ...
- Spring MVC 学习总结(四)——视图与综合示例
一.表单标签库 1.1.简介 从Spring2.0起就提供了一组全面的自动数据绑定标签来处理表单元素.生成的标签兼容HTML 4.01与XHTML 1.0.表单标签库中包含了可以用在JSP页面中渲染H ...
- Eclipse快捷键大全(转载)
一.实用类快捷键 1 常用熟悉的快捷键 CTRL+C(复制).CTRL+X(剪切).CTRL+Z(撤销).CTRL+F(查找).CTRL+H(搜索文件或字符串).CTRL+Y(重做).CTRL+/(双 ...
- Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)
<Windows Azure Platform 系列文章目录> 注意:本文介绍的是Global Azure (http://www.windowsazure.com),如果你使用的是由世纪 ...
- MySQL5.7(5.6)GTID环境下恢复从库思(qi)路(yin)方(ji)法(qiao)
要讨论如何恢复从库,我们得先来了解如下一些概念: GTID_EXECUTED:它是一组包含已经记录在二进制日志文件中的事务集合 GTID_PURGED:它是一组包含已经从二进制日志删除掉的事务集合 ...
- Ionic2学习笔记(2):自定义Component
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5536298.html 上一篇提到,Ionic2提供了很多Co ...