续接上篇:,本篇主要是以我个人的观点总结的一份建议使用的Rule点。
建议使用的Rule点
1、公共的接口、类、方法、属性、字段必须添加标准的XML注释(VS自带的代码分析就可以解决该问题)
2、SA1516 : CSharp.Layout : Adjacent elements must be separated by a blank line
大致意思是说:相邻的元素之间必须要有一个空白行。
3、SA1603: DocumentationMustContainValidXml 注释必须合法(注释中的关键字不能有错误)
4、SA1604: ElementDocumentationMustHaveSummary 元素注释必须包含Summary关键字
5、SA1606:ElementDocumentationMustHaveSummaryText Summary节点内部必须添加文本
6、SA1608:ElementDocumentationMustNotHaveDefaultSummary Summary注释不能使用编译器自带的注释文本
7、SA1609:PropertyDocumentationMustHaveValue 属性的注释中必须包含<Value>节点
8、SA1610:PropertyDocumentationMustHaveValueText 属性的注释<Value>节点必须包含文本值
9、SA1611:ElementParametersMustBeDocumented 参数必须注释
10、SA1612:ElementParameterDocumentationMustMatchElementParameters 参数的个数必须与注释里的个数一致
11、SA1613:ElementParameterDocumentationMustDeclareParameterName 参数的注释里必须有参数的名称
12、SA1614:ElementParameterDocumentationMustHaveText 参数注释节点里不能空着
13、SA1615:ElementReturnValueMustBeDocumented 返回值必须添加注释
14、SA1616:ElementReturnValueDocumentationMustHaveText 返回值注释的节点内必须有文本值
15、SA1617:VoidReturnValueMustNotBeDocumented 空返回值一定不能有返回值注释
16、SA1623:PropertySummaryDocumentationMustMatchAccessors 属性的注释必须与属性的读写权限匹配,private类型的属性不能出现在注释里
17、SA1624:PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess 属性的注释里必须忽略protected关键字,当成public类型当注释
18、SA1625:ElementDocumentationMustNotBeCopiedAndPasted 各个参数的注解不能完全相同(避免copy、post行为)
19、SA1631:DocumentationMustMeetCharacterPercentage 注释节点内部的文本中不能包含过多的字符(举例:包含’---------------------------------------’是不允许的)
20、SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText 构造函数注释标准:“Initializes a new instance of the <see cref="Customer{T}"/> class.”
21、SA1644:DocumentationHeadersMustNotContainBlankLines 注释中不能出现空白行
22、SA1500:CurlyBracketsForMultiLineStatementsMustNotShareLine 花括号不能再同一行。
标准格式: public StRsvrRFun()
{
}
23、SA1501:StatementMustNotBeOnASingleLine 语句不能共享一行
24、SA1502:ElementMustNotBeOnASingleLine 语句不能共享一行
25、SA1503:CurlyBracketsMustNotBeOmitted 花括弧即使在单行代码的情况下也不能省略。
26、SA1504:AllAccessorsMustBeSingleLineOrMultiLine 读写属性,要么在同一行业要么在分多行写,不可规则不统一(个人建议分多行写)。
27、SA1505:OpeningCurlyBracketsMustNotBeFollowedByBlankLine 开始的花括弧后面不能有空白行
28、SA1506:ElementDocumentationHeadersMustNotBeFollowedByBlankLine 元素头部注释跟元素之间不能有空白行
29、SA1507:CodeMustNotContainMultipleBlankLinesInARow 不允许有多行空白行紧挨着(个人建议写一个空白行即可)
30、SA1508:ClosingCurlyBracketsMustNotBePrecededByBlankLine 结尾的花括弧不能再一个空白行之前
31、SA1509:OpeningCurlyBracketsMustNotBePrecededByBlankLine 开始的花括弧不能再一个空白行之前
32、SA1510:ChainedStatementBlocksMustNotBePrecededByBlankLine 相连的语句之间不能有空白行,如try语句与catch语句之间不能有空白行
33、SA1511:WhileDoFooterMustNotBePrecededByBlankLine 与SA1510相同,Do语句与While语句之间不能有空白行
34、SA1512:SingleLineCommentsMustNotBeFollowedByBlankLine 单行注释不能后跟空白行
35、SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine 结束花括弧之后必须有一个空白行
36、SA1514:ElementDocumentationHeaderMustBePrecededByBlankLine 头部注解之前必须有一个空白行
37、SA1515:SingleLineCommentMustBePrecededByBlankLine 单行注释之前要有一个空白行,还一种方法是不加空白行而用四个斜线注释””,建议采取第一种方法
38、SA1516:ElementsMustBeSeparatedByBlankLine 邻近的元素之间要有一个空白行
39、SA1517:CodeMustNotContainBlankLinesAtStartOfFile 代码文件头部字符之前不能出现空白行
40、SA1518:CodeMustNotContainBlankLinesAtEndOfFile代码文件尾部字符之后不能出现空白行
41、SA1407:ArithmeticExpressionsMustDeclarePrecedence 算数表达式必须用明确的标明其优先级(此条与SA1119冲突)
42、SA1408:ConditionalExpressionsMustDeclarePrecedence 条件表达式必须明确的标明其优先级(此条与SA1119冲突) 举例:“if (x || (y && z && a) || b)”
43、SA1409:RemoveUnnecessaryCode 移除无用的代码
44、SA1410:RemoveDelegateParenthesisWhenPossible 调用一个c#匿名方法不包含任何方法参数,必须要包括一个空括号(本人不建议使用匿名方法、匿名委托的语法,具体原因后续做分享)
45、SA1302:InterfaceNamesMustBeginWithI 接口必须以“I”字母开头
SA1208:SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives 系统级的引用在其他引用之前(格式化代码就会自动按照这个规则编排using部分)
46、SA1209:UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives using部分起别名的在最后排布
47、SA1210:UsingDirectivesMustBeOrderedAlphabeticallyByNamespace using部分按照字母顺序编排
48、SA1211:UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName 别名的按照别名的字母编排
49、SA1212:PropertyAccessorsMustFollowOrder 属性按照先get在set
50、SA1213:EventAccessorsMustFollowOrder 时间先remove在add
51、SA1100:DoNotPrefixCallsWithBaseUnlessLocalImplementationExists
change the ‘base.’ prefix to ‘this.’.
52、SA1101:PrefixLocalCallsWithThis ‘this.’前缀不能省略
53、SA1102:QueryClauseMustFollowPreviousClause linq语句要么同一行,要么关键字分布在多行,关键字左对齐
54、SA1106:CodeMustNotContainEmptyStatements 不允许有空白的声明
55、SA1107:CodeMustNotContainMultipleStatementsOnOneLine 同一行里不允许出现多个声明语句
56、SA1108:BlockStatementsMustNotContainEmbeddedComments 非法用例:
if (x != y)
// Make sure x does not equal y
{
}
57、SA1109:BlockStatementsMustNotContainEmbeddedRegions 非法用例:
if (x != y)
#region
{
}
#endregion
58、SA1110:OpeningParenthesisMustBeOnDeclarationLine 方法开始的括弧要在声明的那一行
59、SA1111:ClosingParenthesisMustBeOnLineOfLastParameter 方法结束括弧与最后一个参数同行
60、SA1112:ClosingParenthesisMustBeOnLineOfOpeningParenthesis 如果是空参的情况,开始于结束括弧在同一行
61、SA1113:CommaMustBeOnSameLineAsPreviousParameter 逗号必须与前一个参数同行
62、SA1114:ParameterListMustFollowDeclaration
确保参数列表与开始括号同行,或者另起一行 参数整体要在同一行
63、SA1115:ParameterMustFollowComma 参数与参数之间不能隔空白行
64、SA1116:SplitParametersMustStartOnLineAfterDeclaration 所有参数在同一行或者如下示例:
public string JoinName(
string first,
string last)
65、SA1117:ParametersMustBeOnSameLineOrSeparateLines 同上
66、SA1121:UseBuiltInTypeAlias 使用内嵌的类型别名,如下图:
Type Alias | Type | Fully Qualified Type |
bool | Boolean | System.Boolean |
byte | Byte | System.Byte |
char | Char | System.Char |
decimal | Decimal | System.Decimal |
double | Double | System.Double |
short | Int16 | System.Int16 |
int | Int32 | System.Int32 |
long | Int64 | System.Int64 |
object | Object | System.Object |
sbyte | SByte | System.SByte |
float | Single | System.Single |
string | String | System.String |
ushort | UInt16 | System.UInt16 |
uint | UInt32 | System.UInt32 |
ulong | UInt64 | System.UInt64 |
67、SA1122:UseStringEmptyForEmptyStrings
示例代码:“string s = string.Empty;”不能写成” string s = ""; ”
建议屏蔽掉的Rule点
1、SA1650 : CSharp.Documentation : The documentation text within the summary tag contains incorrectly spelled words: 异常测试 这个是对中文支持的不够好。拼写检查识别不到。
2、SA1200 : CSharp.Ordering : All using directives must be placed inside of the namespace
大致意思是说:using语句要放在namespace内部 没必要采取这一项,采取VS默认的放置位置即可。
3、其它的屏蔽项目就不一一列列举了。
在实际工作中的使用方法(手工的方式触发,随后我会结合CC.Net进行脚本式的调用):
每个project进行的StyleCop设置都会最终记录到一个名“Settings.StyleCop”下,copy配置好的替换其它project即可。操作截图