C#代碼規范和質量檢查工具


代碼風格檢查:StyleCop

The StyleCop tool provides warnings that indicate style and consistency rule violations in C# code. The warnings are organized into rule areas such as documentation, layout, naming, ordering, readability, spacing, and so forth. Each warning signifies a violation of a style or consistency rule.

代碼缺陷檢查:FxCop

代碼分析工具,幫助您檢測和更正代碼缺陷。

托管代碼代碼分析工具分析托管程序集並報告有關程序集的信息,例如 Microsoft .NET Framework 設計准則中規定的編程和設計規則的沖突。分析工具將它在分析期間執行的檢查表示為警告。

代碼質量: 代碼度量值/Code Metrics

代碼度量是一組軟件度量值,使開發人員可以更好地了解他們正在開發的代碼。利用代碼度量,開發人員可以了解哪些類型和/或方法應該返工或進行更徹底的測試。開發團隊可以識別潛在的風險、了解項目的當前狀態,並跟蹤軟件開發的進度。

 

在StyleCop中有一些官方自己寫好的檢測規則下面就是英文的解釋

文檔規則

1、SA1600:ElementsMustBeDocumented元素必須添加注釋

2、SA1601: PartialElementsMustBeDocumented   Partial修飾的成員必須添加注釋

3、SA1602:EnumerationItemsMustBeDocumented 枚舉必須添加注釋

4、SA1603: DocumentationMustContainValidXml  注釋必須合法(注釋中的關鍵字不能有錯誤)

5、SA1604: ElementDocumentationMustHaveSummary 元素注釋必須包含Summary關鍵字

6、SA1605:PartialElementDocumentationMustHaveSummary   Partial修飾的成員注釋必須包含Summary關鍵字

7、SA1606:ElementDocumentationMustHaveSummaryText   Summary節點內部必須添加文本

8、SA1607:PartialElementDocumentationMustHaveSummaryText  Partial修飾的成員注釋Summary節點內部必須添加文本

9、SA1608:ElementDocumentationMustNotHaveDefaultSummary  Summary注釋不能使用編譯器自帶的注釋文本

10、SA1609:PropertyDocumentationMustHaveValue   屬性的注釋中必須包含<Value>節點

11、SA1610:PropertyDocumentationMustHaveValueText  屬性的注釋<Value>節點必須包含文本值

12、SA1611:ElementParametersMustBeDocumented   參數必須注釋

13、SA1612:ElementParameterDocumentationMustMatchElementParameters  參數的個數必須與注釋里的個數一致

14、SA1613:ElementParameterDocumentationMustDeclareParameterName 參數的注釋里必須有參數的名稱

15、SA1614:ElementParameterDocumentationMustHaveText    參數注釋節點里不能空着

16、SA1615:ElementReturnValueMustBeDocumented  返回值必須添加注釋

17、SA1616:ElementReturnValueDocumentationMustHaveText  返回值注釋的節點內必須有文本值

18、SA1617:VoidReturnValueMustNotBeDocumented 空返回值一定不能有返回值注釋

19、SA1618:GenericTypeParametersMustBeDocumented 生成的類型(泛型)參數必須有注釋

20、SA1619:GenericTypeParametersMustBeDocumentedPartialClass  SA1618情況如果有Partial類存在都要有注釋

21、SA1620:GenericTypeParameterDocumentationMustMatchTypeParameters 注釋與泛型必須能匹配上

22、SA1621:GenericTypeParameterDocumentationMustDeclareParameterName 泛型的注釋必須包含泛型定義是的關鍵字(如’T’)

23、SA1622:GenericTypeParameterDocumentationMustHaveText  泛型的注釋節點中必須包含文本值

24、SA1623:PropertySummaryDocumentationMustMatchAccessors  屬性的注釋必須與屬性的讀寫權限匹配,private類型的屬性不能出現在注釋里

25、SA1624:PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess 屬性的注釋里必須忽略protected關鍵字,當成public類型當注釋

26、SA1625:ElementDocumentationMustNotBeCopiedAndPasted  各個參數的注解不能完全相同(避免copy、post行為)

27、SA1626:SingleLineCommentsMustNotUseDocumentationStyleSlashes  單行注釋不能采取三個斜線的注釋方式,斜線的個數必須是二的倍數

28、SA1627:DocumentationTextMustNotBeEmpty   注釋節點內部不能為空(必須有文本值)

29、SA1628:DocumentationTextMustBeginWithACapitalLetter  注釋節點內部的文本必須以大寫字母開頭

30、SA1629:DocumentationTextMustEndWithAPeriod  注釋節點內部的文本必須英文的句號結束

31、SA1630:DocumentationTextMustContainWhitespace  注釋節點內部的文本必須包含空格

32、SA1631:DocumentationMustMeetCharacterPercentage 注釋節點內部的文本中不能包含過多的字符(舉例:包含’---------------------------------------’是不允許的)

33、SA1632:DocumentationTextMustMeetMinimumCharacterLength  已經作廢的規則,不允許有太短的字符串(如’A name’ 中的A字母)

34、SA1633:FileMustHaveHeader   代碼文件頭部必須有說明,一般放置版權信息

35、SA1634:FileHeaderMustShowCopyright   代碼文件頭部注解中必須包含版權關鍵字

36、SA1635:FileHeaderMustHaveCopyrightText代碼文件頭部注解中必須包含版權信息內同

37、SA1636:FileHeaderCopyrightTextMustMatch  代碼文件頭部注解中版權信息必須與設置畫面設置的內容相匹配,在”style seting”畫面的” Company Information tab”進行設置

38、SA1637:FileHeaderMustContainFileName  代碼文件頭部注解中必須包含文件名稱

39、SA1638:FileHeaderFileNameDocumentationMustMatchFileName  代碼文件頭部注解中必須包含文件名稱必須與實際的名稱匹配

40、SA1639:FileHeaderMustHaveSummary  代碼文件頭部注解中必須包含Summary節點

41、SA1640:FileHeaderMustHaveValidCompanyText 代碼文件頭部注解中版權信息必須含有合理的公司名字

42、SA1641:FileHeaderCompanyNameTextMustMatch  代碼文件頭部注解中的公司名字必須與設置畫面設置的內容相匹配,在”style seting”畫面的” Company Information tab”進行設置

43、SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText  構造函數注釋標准:“Initializes a new instance of the <see cref="Customer{T}"/> class.”

44、SA1643:DestructorSummaryDocumentationMustBeginWithStandardText  析構函數注釋標准:“Finalizes an instance of the <see cref="Customer"/> class.”

45、SA1644:DocumentationHeadersMustNotContainBlankLines   注釋中不能出現空白行

46、SA1645:IncludedDocumentationFileDoesNotExist   如果注釋中包含文件,要確定這個文件存在,舉例:“       /// <include file="IncludedDocumentation.xml" path="root/EnabledMethodDocs" />” 這一項過於復雜不建議用,但是如果將來想規范化相同共性東西的注釋的時候倒是可以考慮引入。

47、SA1646:IncludedDocumentationXPathDoesNotExist  如果注釋中包含文件,路徑不存在。

48、SA1647:IncludeNodeDoesNotContainValidFileAndPath  如果注釋中包含文件 文件與路徑都要合法

49、SA1648:InheritDocMustBeUsedWithInheritingClass   這項不明白是什么意思,還請知道的分享給我,謝謝。

50、SA1649:FileHeaderFileNameDocumentationMustMatchTypeName  文件頭注釋必須匹配類型

51、SA1650:ElementDocumentationMustBeSpelledCorrectly 注釋不能有拼寫錯誤(對中文支持不好,不建議使用該項)

布局規則

1、 SA1500:CurlyBracketsForMultiLineStatementsMustNotShareLine  花括號不能再同一行。

標准格式:  public StRsvrRFun()

         {

          }

2、SA1501:StatementMustNotBeOnASingleLine   語句不能共享一行

3、SA1502:ElementMustNotBeOnASingleLine   語句不能共享一行

4、SA1503:CurlyBracketsMustNotBeOmitted  花括弧即使在單行代碼的情況下也不能省略。

5、SA1504:AllAccessorsMustBeSingleLineOrMultiLine  讀寫屬性,要么在同一行業要么在分多行寫,不可規則不統一(個人建議分多行寫)。

6、SA1505:OpeningCurlyBracketsMustNotBeFollowedByBlankLine 開始的花括弧后面不能有空白行

7、SA1506:ElementDocumentationHeadersMustNotBeFollowedByBlankLine 元素頭部注釋跟元素之間不能有空白行

8、SA1507:CodeMustNotContainMultipleBlankLinesInARow 不允許有多行空白行緊挨着(個人建議寫一個空白行即可)

9、SA1508:ClosingCurlyBracketsMustNotBePrecededByBlankLine 結尾的花括弧不能再一個空白行之前

10、SA1509:OpeningCurlyBracketsMustNotBePrecededByBlankLine  開始的花括弧不能再一個空白行之前

11、SA1510:ChainedStatementBlocksMustNotBePrecededByBlankLine 相連的語句之間不能有空白行,如try語句與catch語句之間不能有空白行

12、SA1511:WhileDoFooterMustNotBePrecededByBlankLine  與SA1510相同,Do語句與While語句之間不能有空白行

13、SA1512:SingleLineCommentsMustNotBeFollowedByBlankLine 單行注釋不能后跟空白行

14、SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine 結束花括弧之后必須有一個空白行

15、SA1514:ElementDocumentationHeaderMustBePrecededByBlankLine 頭部注解之前必須有一個空白行

16、SA1515:SingleLineCommentMustBePrecededByBlankLine 單行注釋之前要有一個空白行,還一種方法是不加空白行而用四個斜線注釋”////”,建議采取第一種方法

17、SA1516:ElementsMustBeSeparatedByBlankLine 鄰近的元素之間要有一個空白行

18、SA1517:CodeMustNotContainBlankLinesAtStartOfFile 代碼文件頭部字符之前不能出現空白行

19、SA1518:CodeMustNotContainBlankLinesAtEndOfFile代碼文件尾部字符之后不能出現空白行

可維護規則

1、 SA1119:StatementMustNotUseUnnecessaryParenthesis  語句中不可以出現多余的括弧,無意義的括弧增加了代碼的可讀性

2、 SA1400:AccessModifierMustBeDeclared  必須定義訪問修飾符

3、 SA1401:FieldsMustBePrivate  字段必須定義為私有的

4、 SA1402:FileMayOnlyContainASingleClass 一個CS文件里只定義一個類

5、 SA1403:FileMayOnlyContainASingleNamespace  一個CS文件只包含一個命名空間

6、 SA1404:CodeAnalysisSuppressionMustHaveJustification   Suppression特性(取消報告特定的靜態分析工具規則沖突,允許一個代碼項目上應用多個取消報告設置)必須要有合理理由

7、 SA1405:DebugAssertMustProvideMessageText 參見代碼:“Debug.Assert(value != true, "The value must always be true.");”

8、 SA1406:DebugFailMustProvideMessageText   參見代碼:“Debug.Fail("The code should never reach this point.");”

9、 SA1407:ArithmeticExpressionsMustDeclarePrecedence 算數表達式必須用明確的標明其優先級(此條與SA1119沖突)

10、 SA1408:ConditionalExpressionsMustDeclarePrecedence 條件表達式必須明確的標明其優先級(此條與SA1119沖突) 舉例:“if (x || (y && z && a) || b)”

11、 SA1409:RemoveUnnecessaryCode  移除無用的代碼

12、 SA1410:RemoveDelegateParenthesisWhenPossible  調用一個c#匿名方法不包含任何方法參數,必須要包括一個空括號(本人不建議使用匿名方法、匿名委托的語法,具體原因后續做分享)

13、 SA1411:AttributeConstructorMustNotUseUnnecessaryParenthesis 特性構造函數如果是空參的形式,不要包括那個空括號

命名規則

1、 SA1300:ElementMustBeginWithUpperCaseLetter  首字母必須大寫(個人理解應該是字段以外的東西)

2、 SA1301: ElementMustBeginWithLowerCaseLetter  不會出現的情況

3、 SA1302:InterfaceNamesMustBeginWithI  接口必須以“I”字母開頭

4、 SA1303:ConstFieldNamesMustBeginWithUpperCaseLetter Const常量首字母大寫

5、 SA1304:NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter 非私有非制度的字段必須首字母大寫

6、 SA1305:FieldNamesMustNotUseHungarianNotation 除了列表外的字符不可以出現匈牙利命名規則,在”Style Setting”里的” Hungarian”Tab里設置

7、 SA1306:FieldNamesMustBeginWithLowerCaseLetter 字段名必須首字母小寫

8、 SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter public或者internal字段首字母大寫

9、 SA1308:VariableNamesMustNotBePrefixed  變量名不能有前綴

10、 SA1309:FieldNamesMustNotBeginWithUnderscore  字段名不能以下滑線開頭

11、 SA1310:FieldNamesMustNotContainUnderscore   字段名不能包括下滑線

12、 SA1311:StaticReadonlyFieldsMustBeginWithUpperCaseLetter static與readonly字段首字母大寫

排序規則

1、SA1200:UsingDirectivesMustBePlacedWithinNamespace   using部分必須在Namespace內部(個人不建議用這個規則)

2、SA1201:ElementsMustAppearInTheCorrectOrder 所有的元素必須出現在正確的位置上(個人不建議使用該規則,用region把一個類文件里的元素分好組即可,字段、屬性、對外公布的接口、私有方法等組)

3、SA1202:ElementsMustBeOrderedByAccess  元素的修飾符有一個固定的順序(個人不建議使用該規則,用region把一個類文件里的元素分好組即可,字段、屬性、對外公布的接口、私有方法等組)

4、SA1203:ConstantsMustAppearBeforeFields  常量字段擺放在其它字段之上

5、SA1204:StaticElementsMustAppearBeforeInstanceElements Static  元素擺放在前面

6、SA1205:PartialElementsMustDeclareAccess Partial修飾的元素必須聲明讀寫權限

7、SA1206:DeclarationKeywordsMustFollowOrder 舉例:

keywords must appear in the following order:

Access modifiers

static

All other keywords

8、SA1207:ProtectedMustComeBeforeInternal   Protected在Internal之前

9、SA1208:SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives  系統級的引用在其他引用之前(格式化代碼就會自動按照這個規則編排using部分)

10、SA1209:UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives  using部分起別名的在最后排布

11、SA1210:UsingDirectivesMustBeOrderedAlphabeticallyByNamespace  using部分按照字母順序編排

12、SA1211:UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName 別名的按照別名的字母編排

13、SA1212:PropertyAccessorsMustFollowOrder  屬性按照先get在set

14、SA1213:EventAccessorsMustFollowOrder  時間先remove在add

15、SA1214:StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements  StaticReadonly元素在StaticNonReadonly元素之前

16、SA1215:InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements 

一個readonly 實例元素要在一個非readonly 實例元素

可讀性規則

1、 SA1100:DoNotPrefixCallsWithBaseUnlessLocalImplementationExists

change the ‘base.’ prefix to ‘this.’.

2、 SA1101:PrefixLocalCallsWithThis  ‘this.’前綴不能省略

3、 SA1102:QueryClauseMustFollowPreviousClause   linq語句要么同一行,要么關鍵字分布在多行,關鍵字對齊

4、 SA1103:QueryClausesMustBeOnSeparateLinesOrAllOnOneLine 不是很理解

5、 SA1104:QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines不是很理解

6、 SA1105:QueryClausesSpanningMultipleLinesMustBeginOnOwnLine不是很理解

7、 SA1106:CodeMustNotContainEmptyStatements  不允許有空白的聲明

8、 SA1107:CodeMustNotContainMultipleStatementsOnOneLine 同一行里不允許出現多個聲明語句

9、 SA1108:BlockStatementsMustNotContainEmbeddedComments  非法用例:

if (x != y)

    // Make sure x does not equal y

    {

    }

10、 SA1109:BlockStatementsMustNotContainEmbeddedRegions  非法用例:

    if (x != y)

    #region

    {

    }

    #endregion

11、 SA1110:OpeningParenthesisMustBeOnDeclarationLine 方法開始的括弧要在聲明的那一行

12、 SA1111:ClosingParenthesisMustBeOnLineOfLastParameter  方法結束括弧與最后一個參數同行

13、 SA1112:ClosingParenthesisMustBeOnLineOfOpeningParenthesis  如果是空參的情況,開始於結束括弧在同一行

14、 SA1113:CommaMustBeOnSameLineAsPreviousParameter  逗號必須與前一個參數同行

15、 SA1114:ParameterListMustFollowDeclaration 

確保參數列表與開始括號同行,或者另起一行 參數整體要在同一行

16、 SA1115:ParameterMustFollowComma 參數與參數之間不能隔空白行

17、 SA1116:SplitParametersMustStartOnLineAfterDeclaration  所有參數在同一行或者如下示例:

public string JoinName(

        string first, 

        string last)

18、SA1117:ParametersMustBeOnSameLineOrSeparateLines   同上

19、SA1118:ParameterMustNotSpanMultipleLines 實際調用是參數要在同一行

20、SA1120:CommentsMustContainText  注釋必須節點內部必須有文本

22、SA1122:UseStringEmptyForEmptyStrings  

示例代碼:“string s = string.Empty;”不能寫成” string s = ""; ”

23、SA1123:DoNotPlaceRegionsWithinElements  不使用region(個人較反對這條,個人傾向於用region規整類里的元素)

24、SA1124:DoNotUseRegions  不使用region(個人較反對這條,個人傾向於用region規整類里的元素)

25、SA1125:UseShorthandForNullableTypes  使用簡寫版的可空類型 如”int?”

26、SA1126:PrefixCallsCorrectly  調用類成員的時候要帶上“this”前綴

拼寫規則

1、 SA1000:KeywordsMustBeSpacedCorrectly  關鍵字不能拼寫錯誤

2、 SA1001:CommasMustBeSpacedCorrectly 逗號前面擺放一個空格

3、 SA1002:SemicolonsMustBeSpacedCorrectly  分號前面擺放一個空格

4、 SA1003:SymbolsMustBeSpacedCorrectly  操作符與元素之間不加空格

5、 SA1004:DocumentationLinesMustBeginWithSingleSpace “///”注釋的每一行以一個空格開頭

6、 SA1005:SingleLineCommentsMustBeginWithSingleSpace  單行注釋以一個空格開頭

7、 SA1006:PreprocessorKeywordsMustNotBePrecededBySpace  預處理關鍵字內部不允許出現空格 如“# if Debug”是不允許的

8、 SA1007:OperatorKeywordMustBeFollowedBySpace   操作必須要在一個空格之后

9、 SA1008:OpeningParenthesisMustBeSpacedCorrectly  開始括弧放置合理的空格

10、 SA1009:ClosingParenthesisMustBeSpacedCorrectly  結尾括弧放置合理的空格

11、 SA1010:OpeningSquareBracketsMustBeSpacedCorrectly 開始方括號放置合理的空格

12、 SA1011:ClosingSquareBracketsMustBeSpacedCorrectly   結束方括號放置合理的空格

13、 SA1012:OpeningCurlyBracketsMustBeSpacedCorrectly  開始花括號放置合理的空格

14、 SA1013:ClosingCurlyBracketsMustBeSpacedCorrectly 結束花括號放置合理的空格

15、 SA1014:OpeningGenericBracketsMustBeSpacedCorrectly 同上

16、 SA1015:ClosingGenericBracketsMustBeSpacedCorrectly  同上

17、 SA1016:OpeningAttributeBracketsMustBeSpacedCorrectly  特性開始括號同上

18、 SA1017:ClosingAttributeBracketsMustBeSpacedCorrectly  特性結尾括號同上

19、 SA1018:NullableTypeSymbolsMustNotBePrecededBySpace 空類型前不放置空格

20、 SA1019:MemberAccessSymbolsMustBeSpacedCorrectly  成員訪問關鍵字前后有空格

21、 SA1020:IncrementDecrementSymbolsMustBeSpacedCorrectly 自增、自減關鍵字要有空格

22、 SA1021:NegativeSignsMustBeSpacedCorrectly  負號要有空格

23、 SA1022:PositiveSignsMustBeSpacedCorrectly   正號要有空格

24、 SA1023:DereferenceAndAccessOfMustBeSpacedCorrectly 

25、 SA1024:ColonsMustBeSpacedCorrectly  冒號運算符要有空格

26、 SA1025:CodeMustNotContainMultipleWhitespaceInARow  同一行不允許出現多個空格

27、 SA1026:CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation  new關鍵字之后不允許出現空格

28、 SA1027:TabsMustNotBeUsed  不用tab字符(個人不建議采用這條)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM