博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态代码审查工具FxCop插件开发(c#)
阅读量:5166 次
发布时间:2019-06-13

本文共 3189 字,大约阅读时间需要 10 分钟。

        FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范。FxCop默认提供的是微软默认的审查规则,而且该规则符合《Framework DesignGuidelines》里面大部分的设计规范。因为FxCop默认提供的规范比较严格所以对开发人员的要求也比较高, 而且每个公司都有自己的一套规范,所以默认的规范并不能满足我们的要求,这就需要我们自己开发插件来进行自定义规则,而且FxCop已经集成到了Visual Stduio中,所以我们开发的插件也能在Visual Stduio运行。

       附:MSDN关于FxCop的介绍:

              FxCop10.0官方下载地址:       

             官方需要安装几百兆的SDK ,这里提供了FxCop10.0 独立安装包 :

一、使用FxCop

     1.FxCop软件使用非常简单,开发人员只需要3分钟就可以搞定(其中2分钟是下载软件时间)。

               

注意:1.上图中Rules 选项卡的内容代表的是工具提供的默认规则,规则描述单击鼠标就能看见。

          2. 如果在实际开发中使用工具提供的默认规则 最好去掉(如果无区域文化等特殊要求) Globalization Rules 这个审查规则。

二、开发FxCop 插件

    由于目前官方文档没有介绍自定义规则和相关的API,所以只能靠“猜” ,这是目前找到的关于开发vb.net自定义规则的文章:

    所有的规则都是以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代码审查未通过时显示的相关提示信息 如未通过的原因,解决方案等。文件内容如下:

Interface must be Started With "I"
Interface must be Started With "I"
http://www.cnblogs.com/
Define a new interface to replace {0}.
Warning
Breaking

注意: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里设置为外部启动项 具体参考 。

最后,由于这方面资料比较少,所以一些规则和API使用方式都是通过Reflector反编译得来,期间可能会遇到很多错误。这就需要我们不断的去尝试。

转载于:https://www.cnblogs.com/zw369/p/3609869.html

你可能感兴趣的文章
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Mysql MHA高可用集群架构
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
android 学习资源网址
查看>>
qt安装遇到的错误
查看>>
java:Apache Shiro 权限管理
查看>>
objective c的注释规范
查看>>
FreeNas安装配置使用
查看>>
Django(一)框架简介
查看>>
Python操作SQLite数据库的方法详解
查看>>
菜单和工具条(二)
查看>>
hadoop17---RPC和Socket的区别
查看>>
使用JMeter代理录制app测试脚本
查看>>
Linq to Object实现分页获取数据
查看>>
mac常用系统命令
查看>>