使用FxCop工具分析.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《使用FxCop工具分析.ppt》由会员分享,可在线阅读,更多相关《使用FxCop工具分析.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、使用FxCop工具分析.NET托管代码2007-9-5芮俊什么是什么是FxCop?FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息:assembly的清单(包括引用外部的assembly、netmodule与资源文件及包含在同一文件中的assembly);类型描述信息,包括版本信息与类的描述等;MSIL微软中间语言;资源(图标等))进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以定制自己的规则加
2、入到这个引擎。这个工具微软免费提供。最新版需要.NET2.0支持;此外,也有一个较老的针对.NET1.1的版本。最新版FxCop使用一项叫做内窥(introspection,或称内观、内视)的技术,以窥探你的assembly内部,而前一个版本则使用映射(reflection,或称反射)技术。这一点值得关注,因为使用上一个版本调试碰到问题你不得不停下来,对代码作了任何更改之后都需要重新开始调试;而这些对于新版本都没有必要了。大多数代码分析工具扫描你的源代码,但是FxCop直接对你编译好的代码处理。.NET的每个assembly都有其metadata(可称为元数据,metadata是关于一个ass
3、embly中各元素的类型信息库,它本身也存放在这个assembly中),它对assembly以及assembly内用到的所有类型进行描述。FxCop会使用这个metadata以获知代码内部的运行状况。另外,它也对代码编译时生成的MSIL(MicrosoftIntermediateLanguage,微软中间语言)进行检查。通过对metadata和MSIL检查的结合,FxCop可以得出大量信息,以此获得对代码执行时所作所为的理解。它把你的代码和各条规则逐一比较检查,在每一个实例中,当找到不符合规则的代码时就生成一条消息。FxCop给出的消息的译解给出的消息的译解v下载并安装之后FxCop就可以运行
4、了。FxCop采用单个Windows界面,该界面包括如下三个面板区(当你第一次打开时):v设置(Configuration)面板(左侧):这个面板有两个选项卡,分别标为“目标”(Target)和“规则”(Rules),分别用来定义所要分析的各个assembly以及分析所用的规则。FxCop把所要分析的assemblies、资源(resources)、命名域(namespaces),或者类型(types)叫做目标。这些规则则将应用于这些目标。v消息(Message)面板(右侧):分析结果(由工具条上的“分析”按钮启动)将在消息面板中显示。这些消息主要就是FxCop推荐的对你的代码/assembl
5、y进行改进的信息列表。v属性(Properties)面板(屏幕底部):该面板有两个选项卡,分别标为“输出”(Output)和“属性”(Properties)。“输出”选项卡显示根据规则得出的信息、警告和错误消息。“属性”选项卡则显示所选中的assembly、命名域、类型、类型成员、规则群、规则,或者消息的详细信息。v消息面板是FxCop界面上最为重要的一个部分,因为是它给出了所要改进的内容的信息。总而言之,这就是你为什么首选FxCop工具的原因。vFxCop工具产生的消息包括以下五栏(你也可以在工具中增加或者删除信息栏目):v等级(等级(Level):FxCop为每个问题的严重性指定一个等级。
6、这些等级分别是严重错误(CriticalError)、错误(Error)、严重警告(CriticalWarning)、警告(Warning),以及信息(Informational)。严重错误等级表明在大多数情况下代码不会正确执行,因此尤其重要。信息等级则最无关紧要,因为它仅仅对代码归纳信息。v修复类别修复类别(Fix Category):这由FxCop赋给每一条消息。可能的两个值是“打断”(Breaking)(即,这个代码问题会打断代码执行,代码不会按照预想的方式运行)和“不打断”(NotBreaking)。v确信度(确信度(Certainty):):确信度是FxCop认为的这个问题确实是问题
7、的可能性百分率。实际上,经过你对有疑问的代码一番检查分析之后,会发现有一些消息并不是什么问题,因此FxCop给每一项消息分配了一个百分率,以让你知道程序对这确实是个问题的确信程度。v规则(规则(Rule):):产生这个消息的规则名称。v项目(项目(Item):):产生这个消息的目标项目名称。v如果要知道消息的更多信息,你可以双击它看完整消息。信息内容包括:所违反的规则详情;和规则和冲突的详细代码;获得更多信息的超链接(联机);以及其它更多信息FxCop设计规则v一、Design(设计)1.Abstracttypesshouldnothaveconstructors抽象类不应该声明构造方法v2.
8、Assembliesshouldhavevalidstrongnames程序集应该具有强名称v3.Avoidemptyinterfaces避免使用空的接口v4.Avoidexcessiveparametersongenerictypes避免在泛型类中使用过多的类型参数v5.Avoidnamespaceswithfewtypes避免让名字空间含有过少的类型v6.Avoidoutparameters避免使用out类型的参数v7.Collectionsshouldimplementgenericinterface集合类应该实现泛型接口FxCop设计规则v8.Considerpassingbasety
9、pesasparameters尽量使用基本类型作为参数v9.Declareeventhandlerscorrectly正确的声明事件处理器,事件处理器不应该具有返回值v10.Declaretypesinnamespaces应该在名字空间里面定义类型,而不是外面v11.Defaultparametersshouldnotbeused不应该使用参数默认值(C#没有参数默认值)v12.Defineaccessorsforattributearguments应该为特性(特性)的构造方法参数定义访问器,其名字跟构造方法参数仅首字母大小写不一样v13.Donotcatchgeneralexceptiont
10、ypes不要捕捉普通的异常(即System.Exception)v14.Donotdeclareprotectedmembersinsealedtypes不要在封闭类型中定义受保护的成员v15.Donotdeclarestaticmembersongenerictypes不要在泛型类型中使用静态成员FxCop设计规则v16.Donotdeclarevirtualmembersinsealedtypes不要在封闭类型中定义虚成员v17.Donotdeclarevisibleinstancefields不要定义可见的(public/internal)实例域变量v18.Donotexposegene
11、riclists不要直接暴露范型表v19.Donothidebaseclassmethods不要隐藏(使用或者不使用new)基类的方法v20.Donotnestgenerictypesinmembersignatures不要在成员的签名(参数或者返回值)中嵌套泛型类v21.Donotoverrideoperatorequalsonreferencetypes不要在引用类型中重载=操作符v22.Donotpasstypesbyreference不要使用引用(reforout)传递类型FxCop设计规则v23.EnumStorageshouldbeInt32枚举应该是Int32类型的v24.Enu
12、meratorsshouldbestronglytyped枚举器应该是强类型的v25.Enumsshouldhavezerovalue枚举应该具有0值v26.Genericmethodsshouldprovidetypeparameter泛型类的方法应该提供类型参数v27.ICollectionimplementationshavestronglytypedmembers集合接口的实现中应该使用强类型的成员v28.Implementstandardexceptionconstructors自定义的异常应该实现异常类的四个标准构造方法v29.Indexersshouldnotbemultidim
13、ensional索引不应该是多维的v30.Interfacemethodsshouldbecallablebychildtypes接口方法应该可以被子类调用FxCop设计规则v31.Listsarestronglytyped表应该是强类型的v32.Markassemblieswithassemblyversion用程序集版本标示程序集v33.MarkassemblieswithCLSCompliant使用CLSCompliant特性标示程序集v34.MarkassemblieswithComVisible使用System.Runtime.InteropServices.ComVisibleAt
14、tribute特性标示程序集v35.MarkattributeswithAttributeUsageAttribute使用AttributeUsageAttribute特性标示特性类v36.MarkenumswithFlagsAttribute含有组合的枚举应该使用FlagsAttribute特性标示,相反则不应该v37.Membersshouldnotexposecertainconcretetypes成员(返回值或者参数)不应该暴露具体类型,尽量使用接口v38.Movepinvokestonativemethodsclass将调用移到本地方法类(不是很理解)FxCop设计规则v39.Nes
15、tedtypesshouldnotbevisible嵌套类型不应该是可见的v40.Overridemethodsoncomparabletypes可比较类型应该重写equals等方法v41.Overrideoperatorequalsonoverridingaddandsubtract在重写+和-运算的时候应该同时重写=操作符v42.Propertiesshouldnotbewriteonly属性不应该是只写的v43.ProvideObsoleteAttributemessage过时的成员应该使用ObsoleteAttribute特性标示,并提供相应的Message提示使用者v44.Repla
16、cerepetitiveargumentswithparamsarray使用参数数组代替重复的参数v45.Staticholdertypesshouldbesealed仅含有静态成员的类型应该声明为封闭的v46.Staticholdertypesshouldnothaveconstructors仅含有静态成员的类型应该具有构造方法FxCop设计规则v47.Stringurioverloadscallsystemurioverloads使用string类型的uri参数的重载应调用系统的使用URI类型参数的重载v48.Typesshouldnotextendcertainbasetypes类型不应
17、该从具体的类(已经过派生的类)继承,比如异常类不应该从ApplicationException继承,而应该从System.Exception继承v49.Typesthatowndisposablefieldsshouldbedisposable含有可释放成员的类型应该是可以释放的(实现IDisposable接口)v50.Typesthatownnativeresourcesshouldbedisposable使用了非托管资源的类型应该是可以释放的(实现IDisposable接口)v51.UriparametersshouldnotbestringsUri参数不应该是string类型的v52.U
18、ripropertiesshouldnotbestringsUri属性不应该是string类型的v53.UrireturnvaluesshouldnotbestringsUri类型的返回值不应该是string类型的v54.Useeventswhereappropriate在适当的时候使用事件FxCop设计规则v55.Usegenericeventhandlerinstances使用泛型的事件处理器实例v56.Usegenericswhereappropriate在适当的时候使用范型v57.Useintegralorstringargumentforindexers索引器应该使用整数或者字符串类
19、型的参数v58.Usepropertieswhereappropriate在适当的时候使用属性(而不是以Get或者Set开头的方法)v59.Validateargumentsofpublicmethods对public的方法的参数应该在方法开头处进行检验(比如是否为null的检验)v二、Globalization(全球化)1.Avoidduplicateaccelerators避免在顶层控件中使用重复的快捷键(加速键)2.Donothardcodelocalespecificstrings不要对本地的特殊字符串(比如特殊的系统路径)进行硬编码v3.Donotpassliteralsasloca
20、lizedparameters不要把文本作为需要本地化的参数直接传递(尽量使用资源文件)v4.Setlocalefordatatypes为某些数据类型设定区域和语言属性(DataSet和DataTable的locale属性)FxCop设计规则v5.SpecifyCultureInfo指定文化信息(地域和语言信息),在调用接受System.Globalization.CultureInfo类型参数的方法时应该传递文化信息v6.SpecifyIFormatProvider指定格式供应器,在调用接受System.IFormatProvider类型参数的方法时应该传递格式供应器v7.SpecifyMe
21、ssageBoxOptions指定MessageBox的选项,在调用MessageBox.Show方法时应该传递System.Windows.Forms.MessageBoxOptions,特别在某些从右向左阅读习惯的区域三、Interoperability(互操作性)1.AutolayouttypesshouldnotbeComVisible自动布局的类型不应该对Com可见(设置System.Runtime.InteropServices.ComVisibleAttribute特性为false)v2.Avoidint64argumentsforVB6clients避免使用int64类型,如果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 FxCop 工具 分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内