续接上篇:代码走查工具篇FxCop的规则总结与翻译_Part1

Globalizationrules(区域性规则)

1、 AvoidDuplicateAccelerators  CA1301

避免快捷键冲突,访问键也称为快捷键,它通过使用 Alt 键来实现对控件的键盘访问。如果多个控件具有重复的访问键,则访问键的行为定义不正确。用户可能无法使用访问键来访问目标控件,并可能启用目标控件以外的控件。该规则的当前实现忽略菜单项。不过,同一子菜单中的菜单项不应具有相同的访问键。

2、 DoNotHardcodeLocaleSpecificStrings  CA1302

System.Environment.SpecialFolder 枚举包含表示特殊系统文件夹的成员。对于不同的操作系统,这些文件夹的位置可能具有不同的值,用户也可能会更改某些位置,或者这些位置已经进行了本地化。例如,System 文件夹就是一个特殊文件夹,该文件夹在 Windows XP 中为“C:\WINDOWS\system32”,而在 Windows 2000 中为“C:\WINNT\system32”。 Environment.GetFolderPath 方法返回与 Environment.SpecialFolder 枚举关联的位置。 GetFolderPath 返回的位置已进行了本地化,以便与目前运行的计算机相适应。该规则将使用 GetFolderPath 方法检索的文件夹路径标记到不同的目录级别。每个字符串都会与这些标记进行比较。如果找到匹配项,则假定该方法正在生成一个与该标记关联的表示系统位置的字符串。为了确保可移植性和可本地化性,请使用 GetFolderPath 方法来检索特殊文件夹的位置,而不要使用字符串。

3、 NormalizeStringsToUppercase  CA1308

字符串转化的时候尽量转化成大写(举例,做字符串比较的时候),字符串应正常化为大写字母。少量字符转换为小写字母后不能再转换回来。往返转换即是将字符从一个区域设置转换为另一个表示不同字符数据的区域设置,然后准确地从转换后的字符中检索到原始字。

4、 SetLocaleForDataTypes   CA1306

区域设置决定数据的区域性特定显示元素,例如,数值、货币符号和排序顺序所用的格式。在创建 DataTable 或 DataSet 时,应显式设置区域设置。默认情况下,这些类型的区域设置为当前区域性。对于存储在数据库或文件中并且全局共享的数据,通常应将区域设置设置为固定区域性 (CultureInfo.InvariantCulture)。当数据跨区域性共享时,使用默认区域设置可能导致 DataTable 或 DataSet 的内容无法正确显示或解释。

5、 SpecifyCultureInfo CA1304

指定区域语言,系统启动的时候设置一下当前区域语言里的时间格式,yyyy-MM-dd HH:mm:ss  这样每个画面如果没有给定format的话也不会在win7下出现 3/27/2013。

6、 SpecifyIFormatProvider  CA1305

指定IFormatProvider, 同CA1304。

7、 SpecifyMarshalingForPInvokeStringArguments  CA2101

在从 Unicode 转换为 ANSI 时,并不是所有的 Unicode 字符都能在特定的 ANSI 代码页中表示。最佳映射通过用一个字符替换无法表示的字符来解决此问题。使用此功能会导致潜在的安全漏洞,因为您无法控制选择的字符。例如,恶意代码会有意创建一个包含在特定代码页中无法找到的字符的 Unicode 字符串,而这些字符会转换为“..”或“/”等特殊的文件系统字符。另外还要注意,特殊字符的安全检查经常在将字符串转换为 ANSI 之前发生。

最佳映射是非托管转换(WChar 到 MByte)的默认设置。除非显式禁用了最佳映射,否则代码可能由于此问题而包含可利用的安全漏洞。

// Violates rule: SpecifyMarshalingForPInvokeStringArguments.

[DllImport("advapi32.dll", CharSet=CharSet.Auto)]

internal static extern int RegCreateKey(IntPtr key, String subKey, out IntPtr result);

// Satisfies rule: SpecifyMarshalingForPInvokeStringArguments.

[DllImport("advapi32.dll", CharSet = CharSet.Unicode)]

internal static extern int RegCreateKey2(IntPtr key, String subKey, out IntPtr result);

8、 SpecifyMessageBoxOptions  CA1300

要为使用从右向左阅读顺序的区域性正确显示消息框,必须将 MessageBoxOptions 枚举的 RightAlign 和 RtlReading 成员传递给 Show 方法。检查包含控件的Control.RightToLeft 属性以确定是否使用从右向左的阅读顺序。 CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft

9、 SpecifyStringComparison    CA1307

许多字符串运算(其中最重要的是 Compare 和 Equals 方法)都提供接受 StringComparison 枚举值作为参数的重载。只要存在接受 StringComparison 参数的重载,就应用它来代替不接受此参数的重载。通过显式设置此参数,通常会使代码更清楚,更易于维护。

10、 UseOrdinalStringComparison   CA1309

许多字符串运算(其中最重要的是 StringCompare() 和 StringEquals() 方法)现在都提供接受 StringComparision 枚举值作为参数的重载。当您指定 StringComparison.Ordinal 或 StringComparison.OrdinalIgnoreCase 时,字符串比较将是非语义的。也就是说,在进行比较判断时会忽略特定于自然语言的功能。这意味着,作出的判断基于简单的字节比较,并且忽略大小写或按区域性参数化的等值表。因此,通过将参数显式设置为 StringComparison.Ordinal 或StringComparison.OrdinalIgnoreCase,通常可以提高代码的速度、正确性和可靠性。

Interoperabilityrules(互操作性规则)

1、AutoLayoutTypesShouldNotBeComVisible  CA1403

自动布局类型不应对 COM 可见,Auto 布局类型由公共语言运行时来管理。这些类型的布局因 .NET Framework 的版本不同而不同,这将中断要求特定布局的 COM 客户端。请注意,如果未指定StructLayoutAttribute 特性,则 C#、Visual Basic 和 C++ 编译器会为值类型指定 Sequential 布局。除非另行标记,否则所有公共的非泛型类型都对 COM 可见;所有非公共类型和泛型类型都对 COM 不可见。但是,为了减少误报,此规则要求显式声明类型的 COM 可见性;包含程序集必须用设置为 false 的 System.Runtime.InteropServices.ComVisibleAttribute 进行标记,类型必须用设置为 true 的 ComVisibleAttribute 进行标记。

2、AvoidInt64ArgumentsForVB6Clients  CA1406

Visual Basic 6 COM 客户端不能访问 64 位整数。默认情况下,以下项对 COM 可见:程序集、公共类型、公共类型中的公共实例成员和公共值类型的所有成员。但是,为了减少误报,此规则要求显式声明类型的 COM 可见性;包含程序集必须用设置为 false 的 System.Runtime.InteropServices.ComVisibleAttribute 进行标记,类型必须用设置为 true 的 ComVisibleAttribute 进行标记。

3、由于暂时公司开发涉及不到这块,先不翻译................................

Mobilityrules(流动性规则)

1、DoNotUseIdleProcessPriority   CA1600

不要将进程优先级设置为 Idle。具有 System.Diagnostics.ProcessPriorityClass.Idle 优先级的进程将在 CPU 本应处于空闲状态时占用它,从而阻止进入待机状态。

2、DoNotUseTimersThatPreventPowerStateChanges  CA1601

不要以高于每秒一次的频率进行轮询或使用触发频率高于每秒一次的计时器。频率较高的定期活动会使 CPU 处于繁忙状态,并且会干扰具有节能功能(关闭显示器和硬盘)的空闲计时器。

Namingrules(命名规则)

1、CompoundWordsShouldBeCasedCorrectly   CA1702

标识符的名称根据大小写被拆分成几个单词。每两个连续的单词组合由 Microsoft 拼写检查器库进行检查。如果它被识别,该标识符将生成规则冲突。导致冲突的复合词示例包括“CheckSum”和“MultiPart”,它们的大小写分别应为“Checksum”和“Multipart”。由于以前经常使用,规则中置入了一些特例,一些单个的词也会被标记,例如“Toolbar”和“Filename”,应按照大小写规则将它们视为两个不同的单词(即“ToolBar”和“FileName”)。命名约定为所有针对公共语言运行时的库提供了通用的外观。

2、DoNotNameEnumValuesReserved  CA1700

此规则假定当前不使用名称中包含“reserved”的枚举成员,而是将其作为一个占位符,以在将来的版本中重命名或移除它。重命名或移除成员是一项重大更改。您不应指望用户只因为成员名称包含“reserved”就会忽略该成员,也不能依赖用户阅读或遵守文档。而且,因为保留成员既出现在对象浏览器中也出现在智能集成开发环境中,它们可能对实际使用了哪个成员造成混淆。

在将来的版本中将不使用保留成员,而是向枚举添加新成员。在大多数情况下,只要添加新成员不会引起原始成员的值更改,添加新成员就不是重大更改。

在有限的几种情况下,即使原始成员保留其原始值,添加成员也属于重大更改。主要原因是,新成员在从现有代码路径返回时,必须中断对包含整个成员列表并在默认情况下引发异常的返回值使用 switch(在 Visual Basic 中为 Select)语句的调用方。其次,客户端代码可能不处理反射方法的行为的更改,如 Enum.IsDefined。因此,如果要从现有的方法返回具有新的成员,或者由于使用较差的反射而发生已知的应用程序不兼容,则唯一的无间断解决方法是:

添加一个新的枚举,其中包含原始成员和新成员。用 System.ObsoleteAttribute 特性标记原始枚举。

对任何外部可见并公开原始枚举的类型或成员均执行相同的过程。

3、DoNotPrefixEnumValuesWithTypeName   CA1712

不要将类型名用作枚举值的前缀,枚举成员的名称不能以类型名称作为前缀,因为类型信息将由开发工具提供。命名约定为所有针对公共语言运行时的库提供了通用的外观。

4、EventsShouldNotHaveBeforeOrAfterPrefix  CA1713

事件不应具有 before 或 after 前缀,事件名称应当说明引发事件的操作。若要命名按特定顺序引发的相关事件,请使用现在时或过去时指示一系列操作中的相对位置。例如,当命名关闭资源时引发的一对事件时,可以将其命名为“Closing”和“Closed”,而不是“BeforeClose”和“AfterClose”。

5、FlagsEnumsShouldHavePluralNames    CA1714

Flags 枚举应采用复数形式的名称,标有 FlagsAttribute 的类型具有复数形式的名称,因为该特性指明可以指定多个值。例如,定义星期几的枚举可能打算在可以指定多天的应用程序中使用。此枚举应具有FlagsAttribute 并且可称为“Days”。只允许指定一天的类似枚举将没有该特性,并可称为“Day”。

6、IdentifiersShouldBeCasedCorrectly  CA1709

标识符的大小写应当正确,命名约定为所有针对公共语言运行时的库提供了通用的外观。

按照约定,参数名使用 Camel 大小写;命名空间、类型和成员名称使用 Pascal 大小写。在采用 Camel 大小写格式的名称中,第一个字母为小写,名称中其他所有单词的第一个字母为大写。Camel 大小写形式的名称示例为“packetSniffer”、“ioFile”和“fatalErrorCode”。在采用 Pascal 大小写格式的名称中,第一个字母为大写,名称中其他所有单词的第一个字母为大写。Pascal 大小写形式的名称示例为“PacketSniffer”、“IOFile”和“FatalErrorCode”。

该规则根据大小写将名称拆分为若干单词,并依据常见的双字母单词(例如“In”或“My”)列表来检查所有双字母单词。如果未找到匹配项,则假定该单词是首字母缩略词。此外,此规则假定发现一个首字母缩略词,其名称在一行中包含四个大写字母,或在名称的结尾发现一行中有三个大写字母。

按照约定,双字母的首字母缩略词全部使用大写字母,含三个或三个以上字符的首字母缩略词则使用 Pascal 大小写形式。下面的示例使用该命名约定:“DB”、“CR”、“Cpa”和“Ecma”。下面的示例与该约定冲突:“Io”、“XML”和“DoD”;对于非参数名称,冲突的示例有“xp”和“cpl”。

“ID”是一种导致与该规则冲突的特殊情况。'Id”不是首字母缩略词,而是“identification”的缩写。

7、IdentifiersShouldBeSpelledCorrectly  CA1704

标识符应正确拼写,此规则将标识符解析为标记并检查每个标记的拼写。解析算法执行下列转换:

一个新标记以大写字母开头。例如,MyNameIsJoe 被解析为“My”、“Name”、“Is”和“Joe”标记。

对于多个大写字母,最后一个大写字母开始一个新标记。例如,GUIEditor 被解析为“GUI”和“Editor”标记。

移除前导和尾随撇号。例如,“'sender'”被解析为“sender”标记。

下划线表示一个标记的结尾,并被移除。例如,Hello_world 被解析为“Hello”和“world”标记。

嵌入的与号将被移除。例如,for&mat 被解析为“format”标记。

默认情况下,使用拼写检查器的英语 (en) 版本。目前没有其他语言字典。

8、IdentifiersShouldDifferByMoreThanCase  CA1708

标识符不应仅以大小写进行区分,不能仅通过大小写区分命名空间、类型、成员和参数的标识符,因为针对公共语言运行时的语言不需要区分大小写。

9、IdentifiersShouldHaveCorrectPrefix CA1715

标识符应具有正确的前缀,按照约定,某些编程元素的名称以特定前缀开头。

接口名称应以大写字母“I”开头,后跟另一个大写字母。泛型类型参数名称应以大写字母“T”开头,后面可跟另一个大写字母。

10、IdentifiersShouldHaveCorrectSuffix  CA1715

标识符应具有正确的后缀,

基类型/接口

后缀

System.Attribute

特性

System.EventArgs

EventArgs

System.Exception

异常

System.Collections.ICollection

Collection

System.Collections.IDictionary

Dictionary

System.Collections.IEnumerable

Collection

System.Collections.Queue

Collection 或 Queue

System.Collections.Stack

Collection 或 Stack

System.Collections.Generic.ICollection<T>

Collection

System.Collections.Generic.IDictionary<TKey, TValue>

Dictionary

System.Data.DataSet

数据集

System.Data.DataTable

Collection 或 DataTable

System.IO.Stream

System.Security.IPermission

权限

System.Security.Policy.IMembershipCondition

Condition

事件处理程序委托。

EventHandler

11、IdentifiersShouldNotContainTypeNames  CA1720

标识符不应包含类型名称。

12、IdentifiersShouldNotContainUnderscores  CA1707

标识符不应包含下滑线。

13、IdentifiersShouldNotHaveIncorrectPrefix  CA1722

与CA1715对应

14、IdentifiersShouldNotHaveIncorrectSuffix  CA1711

与CA1710对应

15、IdentifiersShouldNotMatchKeywords  CA1716

标识符不应与关键字冲突。

16、OnlyFlagsEnumsShouldHavePluralNames  CA1717

只有 FlagsAttribute 枚举应采用复数形式的名称。命名约定规定,复数形式的枚举名称表示可以同时指定多个枚举值。 FlagsAttribute 通知编译器应将枚举视为一个位字段,允许对枚举执行按位运算。

如果一次只能指定一个枚举值,枚举的名称应为单数形式的单词。例如,定义星期几的枚举可能打算在可以指定多天的应用程序中使用。此枚举应具有 FlagsAttribute 并且可称为“Days”。只允许指定一天的类似枚举将没有该特性,并可称为“Day”。

17、ParameterNamesShouldMatchBaseDeclaration  CA1725

参数名应与基方法中的声明保持一致。

18、ParameterNamesShouldNotMatchMemberNames CA1719

参数名不应与成员名冲突。

19、PropertyNamesShouldNotMatchGetMethods  CA1721

属性名不应与 get 方法冲突,造成的原因,公共或受保护成员的名称以“Get”开头,且其余部分与公共或受保护属性的名称匹配。例如,包含名为“GetColor”的方法和名为“Color”的属性的类型与该规则冲突。

20、ResourceStringCompoundWordsShouldBeCasedCorrectly   CA1701

资源字符串应该采取正确的大小写,

21、ResourceStringsShouldBeSpelledCorrectly    CA1703

资源字符串应该采取正确的大小写,

22、TypeNamesShouldNotMatchNamespaces  CA1724

类型名不应与命名空间冲突

23、UsePreferredTerms  CA1726

使用首选词条,此规则将标识符分析为标记。将对照规则中内置的词条(位于任何自定义字典的“已否决”部分)比较每个单一标记和每个连续的双标记组合。下表演示该规则中内置的词条以及它们的首选备用词条。

过时的词条

首选词条

Arent

AreNot

Cancelled

Canceled

Cant

Cannot

ComPlus

EnterpriseServices

Couldnt

CouldNot

Didnt

DidNot

Doesnt

DoesNot

Dont

DoNot

Flag 或 Flags

无替代词条。不使用。

Hadnt

HadNot

Hasn’t

HasNot

Havent

HaveNot

Indices

Indexes

Isnt

IsNot

LogIn

LogOn

LogOut

LogOff

Shouldnt

ShouldNot

SignOn

SignIn

SignOff

SignOut

Wasnt

WasNot

Werent

WereNot

Wont

WillNot

Wouldnt

WouldNot

Writeable

Writable

代码走查工具篇FxCop的规则总结与翻译_Part2相关推荐

  1. android 测试工具,Android开源项目第四篇:开发及测试工具篇

    本文为那些不错的Android开源项目第四篇--开发工具篇,**主要介绍Android开发工具和测试工具相关的开源项目**. Android开源项目系列汇总已完成,包括: 1.Buck faceboo ...

  2. 外部工具连接SaaS模式云数据仓库MaxCompute实战:商业BI分析工具篇

    简介:MaxCompute 是面向分析的企业级 SaaS 模式云数据仓库,以 Serverless 架构提供快速.全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运 ...

  3. [项目过程中所遇到的各种问题记录]工具篇——.NET开发时常用的工具类库

    在日常开发的过程当中我们总是会根据项目的开发需求将一些公用的类或者方法进行抽象封装,这些类或方法的抽象封装可能是基于某个项目或者多个项目,最常见的应该就是SQLHelper了,这些类库在实际使用的过程 ...

  4. 开发工具篇第三讲:Maven从入门到实战

    本文是开发工具篇第三讲:maven 从入门到实战 文章目录 1.什么是maven? 2.Maven能为我们解决什么问题? 3.说说maven有什么优缺点? 4.什么是Maven的坐标? 5.讲一下ma ...

  5. Android卡顿掉帧问题分析之工具篇

    Android卡顿掉帧问题分析之原理篇 Android卡顿掉帧问题分析之工具篇 Android卡顿掉帧问题分析之实战篇 Android卡顿掉帧问题分析之原理篇 公众号:Android技术之家Andro ...

  6. 嵌入式 Linux 开发工具篇问题整理//C语言测试(杨辉三角、递归调用实现阶乘、计算器、统计字符串出现次数)//2018.07.12.//

    嵌入式 Linux 开发工具篇问题整理 1. 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)             是否有无操作系统:     2. 移植操作系统的好处有哪些 ...

  7. 【LINUX修行之路】——工具篇gcc/g++的使用和自动化构建工具make/makefile

    学习范围:✔️LINUX ✔️ gcc/g++✔️make/makefile 本文作者:蓝色学者 文章目录 一.前言 二.概念 什么是gcc/g++? 什么是make/makefile? 三.教程 3 ...

  8. 开发工具篇第九讲:菜鸟入坑指南

    摘要:本文是开发工具篇第九讲:菜鸟入坑指南.针对新人上手慢的问题,写了这篇入坑指南,方便自己回顾,总结.本文分为四个部分,分别为jenkins使用技巧:常用软件操作命令:开发手册:调试手册.主要材料来 ...

  9. 如何搭建量化投资研究系统之三(工具篇quantstrat)

    作者:王喆 链接:https://zhuanlan.zhihu.com/p/20232919 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本篇「科学投资」文章来自 ...

最新文章

  1. 关于cocos2d-x 和安卓之间的相互调用
  2. 求列表中个元素的数量
  3. 01_基于应用拆分的技术架构
  4. 安全测试的一些漏洞和测试方法
  5. 【Nutch2.2.1基础教程之2.1】集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行【单机环境】
  6. abnf java实现_详细讲解如何利用Java实现组合式解析器?
  7. 安卓脚本用什么写_什么是抖音脚本?脚本有什么用?
  8. Python-百度经纬度转高德经纬度
  9. 【C/C++】多线程中的几种锁
  10. HaaS Lab 快速体验
  11. OEM/ODM/OBM
  12. 李煌老师发表的算法方面的论文
  13. HTML——表格、表格嵌套、表格布局
  14. 网络工程师资料-永久有效
  15. 《微观经济学》 第九章(二)
  16. 通过CMA、CNAS双认证的第三方软件测试机构安利
  17. Arch linux 安装 docker
  18. 解决Jenkins安装时插件无法下载的问题
  19. openid会变吗?微信小程序开发中的appid、openid、unionid使用总结
  20. nodemon 异常报错:[nodemon] app crashed - waiting for file changes before starting...

热门文章

  1. word中 数字或者字母间距 突然变大
  2. 送 10 本签名书!
  3. iOS-[NSAttributedString]设置富文本和计算富文本高度
  4. Centos7安装uwsgi出现关于SSL错误的问题
  5. 百度搜索结果的URL参数 搜索框提示词搜索方式(rsv_sug2)
  6. 从病毒开始聊聊那些windows下大杂烩
  7. 【信息检索】词典、倒排记录表和容错式检索
  8. 领带打法最新10种(图解)
  9. 公众号运营,如何快速找到内容定位?
  10. e在计算机语言,请问e语言是什么?怎样使用?