Fxcop规则说明.docx
- 文档编号:30298552
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:12
- 大小:21.70KB
Fxcop规则说明.docx
《Fxcop规则说明.docx》由会员分享,可在线阅读,更多相关《Fxcop规则说明.docx(12页珍藏版)》请在冰豆网上搜索。
Fxcop规则说明
MicrosoftFxCop的设计规则
一、Design(设计)1
二、Globalization(全球化)5
四、Naming(命名)6
五、Performance(性能规则)9
一、Design(设计)
1.Abstracttypesshouldnothaveconstructors
抽象类不应该声明构造方法
2.Assembliesshouldhavevalidstrongnames
程序集应该具有强名称
3.Avoidemptyinterfaces
避免使用空的接口
4.Avoidexcessiveparametersongenerictypes
避免在泛型类中使用过多的类型参数
5.Avoidnamespaceswithfewtypes
避免让名字空间含有过少的类型
6.Avoidoutparameters
避免使用out类型的参数
7.Collectionsshouldimplementgenericinterface
集合类应该实现泛型接口
8.Considerpassingbasetypesasparameters
尽量使用基本类型作为参数
9.Declareeventhandlerscorrectly
正确的声明事件处理器,事件处理器不应该具有返回值
10.Declaretypesinnamespaces
应该在名字空间里面定义类型,而不是外面
11.Defaultparametersshouldnotbeused
不应该使用参数默认值(C#没有参数默认值)
12.Defineaccessorsforattributearguments
应该为特性(特性)的构造方法参数定义访问器,其名字跟构造方法参数仅首字母大小写不一样
13.Donotcatchgeneralexceptiontypes
不要捕捉普通的异常(即System.Exception)
14.Donotdeclareprotectedmembersinsealedtypes
不要在封闭类型中定义受保护的成员
15.Donotdeclarestaticmembersongenerictypes
不要在泛型类型中使用静态成员
16.Donotdeclarevirtualmembersinsealedtypes
不要在封闭类型中定义虚成员
17.Donotdeclarevisibleinstancefields
不要定义可见的(public/internal)实例域变量
18.Donotexposegenericlists
不要直接暴露范型表
19.Donothidebaseclassmethods
不要隐藏(使用或者不使用new)基类的方法
20.Donotnestgenerictypesinmembersignatures
不要在成员的签名(参数或者返回值)中嵌套泛型类
21.Donotoverrideoperatorequalsonreferencetypes
不要在引用类型中重载==操作符
22.Donotpasstypesbyreference
不要使用引用(reforout)传递类型
23.EnumStorageshouldbeInt32
枚举应该是Int32类型的
24.Enumeratorsshouldbestronglytyped
枚举器应该是强类型的
25.Enumsshouldhavezerovalue
枚举应该具有0值
26.Genericmethodsshouldprovidetypeparameter
泛型类的方法应该提供类型参数
27.ICollectionimplementationshavestronglytypedmembers
集合接口的实现中应该使用强类型的成员
28.Implementstandardexceptionconstructors
自定义的异常应该实现异常类的四个标准构造方法
29.Indexersshouldnotbemultidimensional
索引不应该是多维的
30.Interfacemethodsshouldbecallablebychildtypes
接口方法应该可以被子类调用
31.Listsarestronglytyped
表应该是强类型的
32.Markassemblieswithassemblyversion
用程序集版本标示程序集
33.MarkassemblieswithCLSCompliant
使用CLSCompliant特性标示程序集
34.MarkassemblieswithComVisible
使用System.Runtime.InteropServices.ComVisibleAttribute特性标示程序集
35.MarkattributeswithAttributeUsageAttribute
使用AttributeUsageAttribute特性标示特性类
36.MarkenumswithFlagsAttribute
含有组合的枚举应该使用FlagsAttribute特性标示,相反则不应该
37.Membersshouldnotexposecertainconcretetypes
成员(返回值或者参数)不应该暴露具体类型,尽量使用接口
38.Movepinvokestonativemethodsclass
将调用移到本地方法类(不是很理解)
39.Nestedtypesshouldnotbevisible
嵌套类型不应该是可见的
40.Overridemethodsoncomparabletypes
可比较类型应该重写equals等方法
41.Overrideoperatorequalsonoverridingaddandsubtract
在重写+和-运算的时候应该同时重写==操作符
42.Propertiesshouldnotbewriteonly
属性不应该是只写的
43.ProvideObsoleteAttributemessage
过时的成员应该使用ObsoleteAttribute特性标示,并提供相应的Message提示使用者
44.Replacerepetitiveargumentswithparamsarray
使用参数数组代替重复的参数
45.Staticholdertypesshouldbesealed
仅含有静态成员的类型应该声明为封闭的
46.Staticholdertypesshouldnothaveconstructors
仅含有静态成员的类型应该具有构造方法
47.Stringurioverloadscallsystemurioverloads
使用string类型的uri参数的重载应调用系统的使用URI类型参数的重载
48.Typesshouldnotextendcertainbasetypes
类型不应该从具体的类(已经过派生的类)继承,比如异常类不应该从ApplicationException继承,而应该从System.Exception继承
49.Typesthatowndisposablefieldsshouldbedisposable
含有可释放成员的类型应该是可以释放的(实现IDisposable接口)
50.Typesthatownnativeresourcesshouldbedisposable
使用了非托管资源的类型应该是可以释放的(实现IDisposable接口)
51.Uriparametersshouldnotbestrings
Uri参数不应该是string类型的
52.Uripropertiesshouldnotbestrings
Uri属性不应该是string类型的
53.Urireturnvaluesshouldnotbestrings
Uri类型的返回值不应该是string类型的
54.Useeventswhereappropriate
在适当的时候使用事件
55.Usegenericeventhandlerinstances
使用泛型的事件处理器实例
56.Usegenericswhereappropriate
在适当的时候使用范型
57.Useintegralorstringargumentforindexers
索引器应该使用整数或者字符串类型的参数
58.Usepropertieswhereappropriate
在适当的时候使用属性(而不是以Get或者Set开头的方法)
59.Validateargumentsofpublicmethods
对public的方法的参数应该在方法开头处进行检验(比如是否为null的检验)
二、Globalization(全球化)
1.Avoidduplicateaccelerators
避免在顶层控件中使用重复的快捷键(加速键)
2.Donothardcodelocalespecificstrings
不要对本地的特殊字符串(比如特殊的系统路径)进行硬编码
3.Donotpassliteralsaslocalizedparameters
不要把文本作为需要本地化的参数直接传递(尽量使用资源文件)
4.Setlocalefordatatypes
为某些数据类型设定区域和语言属性(DataSet和DataTable的locale属性)
5.SpecifyCultureInfo
指定文化信息(地域和语言信息),在调用接受System.Globalization.CultureInfo类型参数的方法时应该传递文化信息
6.SpecifyIFormatProvider
指定格式供应器,在调用接受System.IFormatProvider类型参数的方法时应该传递格式供应器
7.SpecifyMessageBoxOptions
指定MessageBox的选项,在调用MessageBox.Show方法时应该传递System.Windows.Forms.MessageBoxOptions,特别在某些从右向左阅读习惯的区域
三、Interoperability(互操作性)
1.AutolayouttypesshouldnotbeComVisible
自动布局的类型不应该对Com可见(设置System.Runtime.InteropServices.ComVisibleAttribute特性为false)
2.Avoidint64argumentsforVB6clients
避免使用int64类型,如果成员可能被VisualBasic6COMclients调用
3.Avoidnon-publicfieldsinComVisiblevaluetypes
避免在一个标记有ComVisible特性的值类型里面包含非公有的实例域
4.AvoidoverloadsinComVisibleinterfaces
避免在一个标记有ComVisible特性的接口内声明重载
5.AvoidstaticmembersinComVisibletypes
避免在一个标记有ComVisible特性的类型
6.CallGetLastErrorimmediatelyafterpinvoke
进行pinvoke以后应该立即使用GetLastError读取错误信息
7.Comregistrationmethodsshouldbematched
Com注册方法(标记有System.Runtime.InteropServices.ComRegisterFunctionAttribute特性的方法)应该是配对的(同时具有一个标记有System.Runtime.InteropServices.ComUnregisterFunctionAttribute的方法与之匹配)
8.Comregistrationmethodsshouldnotbevisible
Com注册方法应该是不可见的
9.ComvisibletypebasetypesshouldbeComVisible
标记有ComVisible特性的类型的基类同样应从标记有ComVisible特性的类继承
10.Comvisibletypesshouldbecreatable
标记有ComVisible特性的类型应该能够使用默认构造器构造
11.DeclarePInvokescorrectly
正确定义PInvokes
12.DonotuseAutoDualClassInterfaceType
不要把System.Runtime.InteropServices.ClassInterfaceAttribute特性的值设置为System.Runtime.InteropServices.ClassInterfaceType.AutoDual
13.MarkbooleanpinvokeargumentswithMarshalAs
布尔型的pinvoke参数应该使用System.Runtime.InteropServices.MarshalAsAttribute特性标记
14.MarkComSourceinterfacesasIDispatch
将System.Runtime.InteropServices.ComSourceInterfacesAttribute特性标记为System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch.
15.PInvokeentrypointsshouldexist
Pinvoke应该存在入口点
16.PInvokesshouldnotbevisible
Pinvoke应该是可见的
四、Naming(命名)
1.Avoidlanguagespecifictypenamesinparameters
避免在参数中使用与特定语言相关的类型(用Uint16代替Ushort)
2.Avoidtypenamesinparameters
避免在外部可见的参数中使用类型名
3.Compoundwordsshouldbecasedcorrectly
复合词应该使用正确的大小写(不要将Mutlipart写成MultiPart,也不要将ToolBar写成Toolbar,FileName写成Filename)
4.Donotnameenumvalues'Reserved'
不要在枚举值中使用保留字
5.Donotprefixenumvalueswithtypename
不要在枚举值使用类型前缀(比如不要使用Digital之类的前缀)
6.Eventsshouldnothavebeforeorafterprefix
事件的名称不应该包含before和after前缀(尽量使用ing和ed的后缀)
7.Flagsenumsshouldhavepluralnames
标记有System.FlagsAttribute特性的枚举应该使用复数形式的名称
8.Identifiersshouldbecasedcorrectly
标示符(名字空间、类名、属性名、接口名、方法名等)应该使用正确的大小写(通常以大写开头,以后的每个单词都首字母大写)
9.Identifiersshouldbespelledcorrectly
标示符应该可以被正确的划分为不同的单词
10.Identifiersshoulddifferbymorethancase
标示符应该不止有大小写上的不同(因为某些语言是不区分大小写的)
11.Identifiersshouldhavecorrectprefix
标示符应该使用正确的前缀(接口应该使用字母I开头)
12.Identifiersshouldhavecorrectsuffix
标示符应该使用正确的后缀
System.Attribute/Attribute
System.EventArgs/EventArgs
System.Exception/Exception
System.Collections.ICollection/Collection
System.Collections.IDictionary/Dictionary
System.Collections.IEnumerable/Collection
System.Collections.Queue/CollectionorQueue
System.Collections.Stack/CollectionorStack
System.Collections.Generic.ICollection/Collection
System.Collections.Generic.IDictionary/Dictionary
System.Data.DataSet/DataSet
System.Data.DataTable/CollectionorDataTable
System.IO.Stream/Stream
System.Security.IPermission/Permission
System.Security.Policy.IMembershipCondition/Condition
Anevent-handlerdelegate./EventHandler
13.Identifiersshouldnotcontainunderscores
标示符不应该使用下划线
14.Identifiersshouldnothaveincorrectprefix
标示符不应该使用不正确的前缀(比如不应使用一个字母作为前缀)
15.Identifiersshouldnothaveincorrectsuffix
标示符不应该使用不正确的后缀(不要在不正确的地方使用12中提及的后缀名,和Delegate、Enum、Flagsforanenumeration、Impl等后缀名)
16.Identifiersshouldnotmatchkeywords
标示符不应该与系统关键字冲突
17.Longacronymsshouldbepascal-cased
长度大于等于3的缩写词应该使用pascal的命名规则,即首字母大写
18.OnlyFlagsAttributeenumsshouldhavepluralnames
只有标记有System.FlagsAttribute特性的枚举的名称才应该使用复数,其他时候应该使用单数
19.Parameternamesshouldmatchbasedeclaration
派生项的参数名应该同基项相吻合(派生类重写或实现的方法应该同基项具有相同的参数名)
20.Parameternamesshouldnotmatchmembernames
方法的参数名不应该同类或接口的成员名一样
21.Propertynamesshouldnotmatchgetmethods
属性名字不应该同Get开头的方法的名称的后半部分相同
22.Resourcestringcompoundwordsshouldbecasedcorrectly
包含符合单词的资源字符串应该使用正确的大小写(每个单词的首字母大写)
23.Resourcestringsshouldbespelledcorrectly
资源字符串应该正确的拼写
24.Shortacronymsshouldbeuppercase
短的首字母缩写词应该全部大写(比如DB,CR)
25.Typenamesshouldnotmatchnamespaces
类型的名字不应该与名字空间的名字相同
26.Usepreferredterms
优先使用某些项目或者名称,以下这些,后者为优先使用的
ComPlus/EnterpriseServices
Cancelled/Canceled
Indices/Indexes
LogIn/LogOn
LogOut/LogOff
SignOn/SignIn
SignOff/SignOut
Writeable/Writable
五、Performance(性能规则)
1.Avoidcallsthatrequireunboxing
避免调用一个方法,它返回object类型,而你需要的是一个值类型(需要对返回值进行拆箱操作)
2.Avoidcostlycallswherepossible
尽可能的避免进行代价高昂的调用
3.Avoidexcessivelocals
避免使用过多的局部变量(多于64个,部分可能是编译器生成的)
4.Avoiduncalledprivatecode
避免声明在程序集内从来未被调用的私有成员(private和internal),以下除外:
明确的接口成员
静态构造方法
静态的Main方法(不含参数或仅包含一个string数组的参数的)
序列化构造方法
标记有System.Runtime.InteropServices.ComRegisterFunctionAttribute或者System.Runtime.InteropServices.ComUnregisterFunctionAttribute.特性的
重写的方法
5.Avoiduninstantiatedinternalclasses
避免声明不会被实例化的内部类,以下情况除外
值类型
抽象类型
枚举
委托
编译器生成的数组类型
仅含有静态成员的内部类
6.Avoidunnecessarystringcreation
避免创建不必
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Fxcop 规则 说明