代碼風格檢查: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.c#
代碼缺陷檢查:FxCopapi
代碼分析工具,幫助您檢測和更正代碼缺陷。app
託管代碼代碼分析工具分析託管程序集並報告有關程序集的信息,例如 Microsoft .NET Framework 設計準則中規定的編程和設計規則的衝突。分析工具將它在分析期間執行的檢查表示爲警告。less
代碼質量: 代碼度量值/Code Metricside
代碼度量是一組軟件度量值,使開發人員能夠更好地瞭解他們正在開發的代碼。利用代碼度量,開發人員能夠了解哪些類型和/或方法應該返工或進行更完全的測試。開發團隊能夠識別潛在的風險、瞭解項目的當前狀態,並跟蹤軟件開發的進度。函數
在StyleCop中有一些官方本身寫好的檢測規則下面就是英文的解釋工具
文檔規則佈局
一、SA1600:ElementsMustBeDocumented元素必須添加註釋post
二、SA1601: PartialElementsMustBeDocumented Partial修飾的成員必須添加註釋
三、SA1602:EnumerationItemsMustBeDocumented 枚舉必須添加註釋
四、SA1603: DocumentationMustContainValidXml 註釋必須合法(註釋中的關鍵字不能有錯誤)
五、SA1604: ElementDocumentationMustHaveSummary 元素註釋必須包含Summary關鍵字
六、SA1605:PartialElementDocumentationMustHaveSummary Partial修飾的成員註釋必須包含Summary關鍵字
七、SA1606:ElementDocumentationMustHaveSummaryText Summary節點內部必須添加文本
八、SA1607:PartialElementDocumentationMustHaveSummaryText Partial修飾的成員註釋Summary節點內部必須添加文本
九、SA1608:ElementDocumentationMustNotHaveDefaultSummary Summary註釋不能使用編譯器自帶的註釋文本
十、SA1609:PropertyDocumentationMustHaveValue 屬性的註釋中必須包含<Value>節點
十一、SA1610:PropertyDocumentationMustHaveValueText 屬性的註釋<Value>節點必須包含文本值
十二、SA1611:ElementParametersMustBeDocumented 參數必須註釋
1三、SA1612:ElementParameterDocumentationMustMatchElementParameters 參數的個數必須與註釋裏的個數一致
1四、SA1613:ElementParameterDocumentationMustDeclareParameterName 參數的註釋裏必須有參數的名稱
1五、SA1614:ElementParameterDocumentationMustHaveText 參數註釋節點裏不能空着
1六、SA1615:ElementReturnValueMustBeDocumented 返回值必須添加註釋
1七、SA1616:ElementReturnValueDocumentationMustHaveText 返回值註釋的節點內必須有文本值
1八、SA1617:VoidReturnValueMustNotBeDocumented 空返回值必定不能有返回值註釋
1九、SA1618:GenericTypeParametersMustBeDocumented 生成的類型(泛型)參數必須有註釋
20、SA1619:GenericTypeParametersMustBeDocumentedPartialClass SA1618狀況若是有Partial類存在都要有註釋
2一、SA1620:GenericTypeParameterDocumentationMustMatchTypeParameters 註釋與泛型必須能匹配上
2二、SA1621:GenericTypeParameterDocumentationMustDeclareParameterName 泛型的註釋必須包含泛型定義是的關鍵字(如’T’)
2三、SA1622:GenericTypeParameterDocumentationMustHaveText 泛型的註釋節點中必須包含文本值
2四、SA1623:PropertySummaryDocumentationMustMatchAccessors 屬性的註釋必須與屬性的讀寫權限匹配,private類型的屬性不能出如今註釋裏
2五、SA1624:PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess 屬性的註釋裏必須忽略protected關鍵字,當成public類型當註釋
2六、SA1625:ElementDocumentationMustNotBeCopiedAndPasted 各個參數的註解不能徹底相同(避免copy、post行爲)
2七、SA1626:SingleLineCommentsMustNotUseDocumentationStyleSlashes 單行註釋不能採起三個斜線的註釋方式,斜線的個數必須是二的倍數
2八、SA1627:DocumentationTextMustNotBeEmpty 註釋節點內部不能爲空(必須有文本值)
2九、SA1628:DocumentationTextMustBeginWithACapitalLetter 註釋節點內部的文本必須以大寫字母開頭
30、SA1629:DocumentationTextMustEndWithAPeriod 註釋節點內部的文本必須英文的句號結束
3一、SA1630:DocumentationTextMustContainWhitespace 註釋節點內部的文本必須包含空格
3二、SA1631:DocumentationMustMeetCharacterPercentage 註釋節點內部的文本中不能包含過多的字符(舉例:包含’---------------------------------------’是不容許的)
3三、SA1632:DocumentationTextMustMeetMinimumCharacterLength 已經做廢的規則,不容許有過短的字符串(如’A name’ 中的A字母)
3四、SA1633:FileMustHaveHeader 代碼文件頭部必須有說明,通常放置版權信息
3五、SA1634:FileHeaderMustShowCopyright 代碼文件頭部註解中必須包含版權關鍵字
3六、SA1635:FileHeaderMustHaveCopyrightText代碼文件頭部註解中必須包含版權信息內同
3七、SA1636:FileHeaderCopyrightTextMustMatch 代碼文件頭部註解中版權信息必須與設置畫面設置的內容相匹配,在」style seting」畫面的」 Company Information tab」進行設置
3八、SA1637:FileHeaderMustContainFileName 代碼文件頭部註解中必須包含文件名稱
3九、SA1638:FileHeaderFileNameDocumentationMustMatchFileName 代碼文件頭部註解中必須包含文件名稱必須與實際的名稱匹配
40、SA1639:FileHeaderMustHaveSummary 代碼文件頭部註解中必須包含Summary節點
4一、SA1640:FileHeaderMustHaveValidCompanyText 代碼文件頭部註解中版權信息必須含有合理的公司名字
4二、SA1641:FileHeaderCompanyNameTextMustMatch 代碼文件頭部註解中的公司名字必須與設置畫面設置的內容相匹配,在」style seting」畫面的」 Company Information tab」進行設置
4三、SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText 構造函數註釋標準:「Initializes a new instance of the <see cref="Customer{T}"/> class.」
4四、SA1643:DestructorSummaryDocumentationMustBeginWithStandardText 析構函數註釋標準:「Finalizes an instance of the <see cref="Customer"/> class.」
4五、SA1644:DocumentationHeadersMustNotContainBlankLines 註釋中不能出現空白行
4六、SA1645:IncludedDocumentationFileDoesNotExist 若是註釋中包含文件,要肯定這個文件存在,舉例:「 /// <include file="IncludedDocumentation.xml" path="root/EnabledMethodDocs" />」 這一項過於複雜不建議用,可是若是未來想規範化相同共性東西的註釋的時候卻是能夠考慮引入。
4七、SA1646:IncludedDocumentationXPathDoesNotExist 若是註釋中包含文件,路徑不存在。
4八、SA1647:IncludeNodeDoesNotContainValidFileAndPath 若是註釋中包含文件 文件與路徑都要合法
4九、SA1648:InheritDocMustBeUsedWithInheritingClass 這項不明白是什麼意思,還請知道的分享給我,謝謝。
50、SA1649:FileHeaderFileNameDocumentationMustMatchTypeName 文件頭註釋必須匹配類型
5一、SA1650:ElementDocumentationMustBeSpelledCorrectly 註釋不能有拼寫錯誤(對中文支持很差,不建議使用該項)
佈局規則
一、 SA1500:CurlyBracketsForMultiLineStatementsMustNotShareLine 花括號不能再同一行。
標準格式: public StRsvrRFun()
{
}
二、SA1501:StatementMustNotBeOnASingleLine 語句不能共享一行
三、SA1502:ElementMustNotBeOnASingleLine 語句不能共享一行
四、SA1503:CurlyBracketsMustNotBeOmitted 花括弧即便在單行代碼的狀況下也不能省略。
五、SA1504:AllAccessorsMustBeSingleLineOrMultiLine 讀寫屬性,要麼在同一行業要麼在分多行寫,不可規則不統一(我的建議分多行寫)。
六、SA1505:OpeningCurlyBracketsMustNotBeFollowedByBlankLine 開始的花括弧後面不能有空白行
七、SA1506:ElementDocumentationHeadersMustNotBeFollowedByBlankLine 元素頭部註釋跟元素之間不能有空白行
八、SA1507:CodeMustNotContainMultipleBlankLinesInARow 不容許有多行空白行緊挨着(我的建議寫一個空白行便可)
九、SA1508:ClosingCurlyBracketsMustNotBePrecededByBlankLine 結尾的花括弧不能再一個空白行以前
十、SA1509:OpeningCurlyBracketsMustNotBePrecededByBlankLine 開始的花括弧不能再一個空白行以前
十一、SA1510:ChainedStatementBlocksMustNotBePrecededByBlankLine 相連的語句之間不能有空白行,如try語句與catch語句之間不能有空白行
十二、SA1511:WhileDoFooterMustNotBePrecededByBlankLine 與SA1510相同,Do語句與While語句之間不能有空白行
1三、SA1512:SingleLineCommentsMustNotBeFollowedByBlankLine 單行註釋不能後跟空白行
1四、SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine 結束花括弧以後必須有一個空白行
1五、SA1514:ElementDocumentationHeaderMustBePrecededByBlankLine 頭部註解以前必須有一個空白行
1六、SA1515:SingleLineCommentMustBePrecededByBlankLine 單行註釋以前要有一個空白行,還一種方法是不加空白行而用四個斜線註釋」////」,建議採起第一種方法
1七、SA1516:ElementsMustBeSeparatedByBlankLine 鄰近的元素之間要有一個空白行
1八、SA1517:CodeMustNotContainBlankLinesAtStartOfFile 代碼文件頭部字符以前不能出現空白行
1九、SA1518:CodeMustNotContainBlankLinesAtEndOfFile代碼文件尾部字符以後不能出現空白行
可維護規則
一、 SA1119:StatementMustNotUseUnnecessaryParenthesis 語句中不能夠出現多餘的括弧,無心義的括弧增長了代碼的可讀性
二、 SA1400:AccessModifierMustBeDeclared 必須定義訪問修飾符
三、 SA1401:FieldsMustBePrivate 字段必須定義爲私有的
四、 SA1402:FileMayOnlyContainASingleClass 一個CS文件裏只定義一個類
五、 SA1403:FileMayOnlyContainASingleNamespace 一個CS文件只包含一個命名空間
六、 SA1404:CodeAnalysisSuppressionMustHaveJustification Suppression特性(取消報告特定的靜態分析工具規則衝突,容許一個代碼項目上應用多個取消報告設置)必需要有合理理由
七、 SA1405:DebugAssertMustProvideMessageText 參見代碼:「Debug.Assert(value != true, "The value must always be true.");」
八、 SA1406:DebugFailMustProvideMessageText 參見代碼:「Debug.Fail("The code should never reach this point.");」
九、 SA1407:ArithmeticExpressionsMustDeclarePrecedence 算數表達式必須用明確的標明其優先級(此條與SA1119衝突)
十、 SA1408:ConditionalExpressionsMustDeclarePrecedence 條件表達式必須明確的標明其優先級(此條與SA1119衝突) 舉例:「if (x || (y && z && a) || b)」
十一、 SA1409:RemoveUnnecessaryCode 移除無用的代碼
十二、 SA1410:RemoveDelegateParenthesisWhenPossible 調用一個c#匿名方法不包含任何方法參數,必需要包括一個空括號(本人不建議使用匿名方法、匿名委託的語法,具體緣由後續作分享)
1三、 SA1411:AttributeConstructorMustNotUseUnnecessaryParenthesis 特性構造函數若是是空參的形式,不要包括那個空括號
命名規則
一、 SA1300:ElementMustBeginWithUpperCaseLetter 首字母必須大寫(我的理解應該是字段之外的東西)
二、 SA1301: ElementMustBeginWithLowerCaseLetter 不會出現的狀況
三、 SA1302:InterfaceNamesMustBeginWithI 接口必須以「I」字母開頭
四、 SA1303:ConstFieldNamesMustBeginWithUpperCaseLetter Const常量首字母大寫
五、 SA1304:NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter 非私有非制度的字段必須首字母大寫
六、 SA1305:FieldNamesMustNotUseHungarianNotation 除了列表外的字符不能夠出現匈牙利命名規則,在」Style Setting」裏的」 Hungarian」Tab裏設置
七、 SA1306:FieldNamesMustBeginWithLowerCaseLetter 字段名必須首字母小寫
八、 SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter public或者internal字段首字母大寫
九、 SA1308:VariableNamesMustNotBePrefixed 變量名不能有前綴
十、 SA1309:FieldNamesMustNotBeginWithUnderscore 字段名不能如下滑線開頭
十一、 SA1310:FieldNamesMustNotContainUnderscore 字段名不能包括下滑線
十二、 SA1311:StaticReadonlyFieldsMustBeginWithUpperCaseLetter static與readonly字段首字母大寫
排序規則
一、SA1200:UsingDirectivesMustBePlacedWithinNamespace using部分必須在Namespace內部(我的不建議用這個規則)
二、SA1201:ElementsMustAppearInTheCorrectOrder 全部的元素必須出如今正確的位置上(我的不建議使用該規則,用region把一個類文件裏的元素分好組便可,字段、屬性、對外公佈的接口、私有方法等組)
三、SA1202:ElementsMustBeOrderedByAccess 元素的修飾符有一個固定的順序(我的不建議使用該規則,用region把一個類文件裏的元素分好組便可,字段、屬性、對外公佈的接口、私有方法等組)
四、SA1203:ConstantsMustAppearBeforeFields 常量字段擺放在其它字段之上
五、SA1204:StaticElementsMustAppearBeforeInstanceElements Static 元素擺放在前面
六、SA1205:PartialElementsMustDeclareAccess Partial修飾的元素必須聲明讀寫權限
七、SA1206:DeclarationKeywordsMustFollowOrder 舉例:
keywords must appear in the following order:
Access modifiers
static
All other keywords
八、SA1207:ProtectedMustComeBeforeInternal Protected在Internal以前
九、SA1208:SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives 系統級的引用在其餘引用以前(格式化代碼就會自動按照這個規則編排using部分)
十、SA1209:UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives using部分起別名的在最後排布
十一、SA1210:UsingDirectivesMustBeOrderedAlphabeticallyByNamespace using部分按照字母順序編排
十二、SA1211:UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName 別名的按照別名的字母編排
1三、SA1212:PropertyAccessorsMustFollowOrder 屬性按照先get在set
1四、SA1213:EventAccessorsMustFollowOrder 時間先remove在add
1五、SA1214:StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements StaticReadonly元素在StaticNonReadonly元素以前
1六、SA1215:InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements
一個readonly 實例元素要在一個非readonly 實例元素
可讀性規則
一、 SA1100:DoNotPrefixCallsWithBaseUnlessLocalImplementationExists
change the ‘base.’ prefix to ‘this.’.
二、 SA1101:PrefixLocalCallsWithThis ‘this.’前綴不能省略
三、 SA1102:QueryClauseMustFollowPreviousClause linq語句要麼同一行,要麼關鍵字分佈在多行,關鍵字對齊
四、 SA1103:QueryClausesMustBeOnSeparateLinesOrAllOnOneLine 不是很理解
五、 SA1104:QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines不是很理解
六、 SA1105:QueryClausesSpanningMultipleLinesMustBeginOnOwnLine不是很理解
七、 SA1106:CodeMustNotContainEmptyStatements 不容許有空白的聲明
八、 SA1107:CodeMustNotContainMultipleStatementsOnOneLine 同一行裏不容許出現多個聲明語句
九、 SA1108:BlockStatementsMustNotContainEmbeddedComments 非法用例:
if (x != y)
// Make sure x does not equal y
{
}
十、 SA1109:BlockStatementsMustNotContainEmbeddedRegions 非法用例:
if (x != y)
#region
{
}
#endregion
十一、 SA1110:OpeningParenthesisMustBeOnDeclarationLine 方法開始的括弧要在聲明的那一行
十二、 SA1111:ClosingParenthesisMustBeOnLineOfLastParameter 方法結束括弧與最後一個參數同行
1三、 SA1112:ClosingParenthesisMustBeOnLineOfOpeningParenthesis 若是是空參的狀況,開始於結束括弧在同一行
1四、 SA1113:CommaMustBeOnSameLineAsPreviousParameter 逗號必須與前一個參數同行
1五、 SA1114:ParameterListMustFollowDeclaration
確保參數列表與開始括號同行,或者另起一行 參數總體要在同一行
1六、 SA1115:ParameterMustFollowComma 參數與參數之間不能隔空白行
1七、 SA1116:SplitParametersMustStartOnLineAfterDeclaration 全部參數在同一行或者以下示例:
public string JoinName(
string first,
string last)
1八、SA1117:ParametersMustBeOnSameLineOrSeparateLines 同上
1九、SA1118:ParameterMustNotSpanMultipleLines 實際調用是參數要在同一行
20、SA1120:CommentsMustContainText 註釋必須節點內部必須有文本
2二、SA1122:UseStringEmptyForEmptyStrings
示例代碼:「string s = string.Empty;」不能寫成」 string s = ""; 」
2三、SA1123:DoNotPlaceRegionsWithinElements 不使用region(我的較反對這條,我的傾向於用region規整類裏的元素)
2四、SA1124:DoNotUseRegions 不使用region(我的較反對這條,我的傾向於用region規整類裏的元素)
2五、SA1125:UseShorthandForNullableTypes 使用簡寫版的可空類型 如」int?」
2六、SA1126:PrefixCallsCorrectly 調用類成員的時候要帶上「this」前綴
拼寫規則
一、 SA1000:KeywordsMustBeSpacedCorrectly 關鍵字不能拼寫錯誤
二、 SA1001:CommasMustBeSpacedCorrectly 逗號前面擺放一個空格
三、 SA1002:SemicolonsMustBeSpacedCorrectly 分號前面擺放一個空格
四、 SA1003:SymbolsMustBeSpacedCorrectly 操做符與元素之間不加空格
五、 SA1004:DocumentationLinesMustBeginWithSingleSpace 「///」註釋的每一行以一個空格開頭
六、 SA1005:SingleLineCommentsMustBeginWithSingleSpace 單行註釋以一個空格開頭
七、 SA1006:PreprocessorKeywordsMustNotBePrecededBySpace 預處理關鍵字內部不容許出現空格 如「# if Debug」是不容許的
八、 SA1007:OperatorKeywordMustBeFollowedBySpace 操做必需要在一個空格以後
九、 SA1008:OpeningParenthesisMustBeSpacedCorrectly 開始括弧放置合理的空格
十、 SA1009:ClosingParenthesisMustBeSpacedCorrectly 結尾括弧放置合理的空格
十一、 SA1010:OpeningSquareBracketsMustBeSpacedCorrectly 開始方括號放置合理的空格
十二、 SA1011:ClosingSquareBracketsMustBeSpacedCorrectly 結束方括號放置合理的空格
1三、 SA1012:OpeningCurlyBracketsMustBeSpacedCorrectly 開始花括號放置合理的空格
1四、 SA1013:ClosingCurlyBracketsMustBeSpacedCorrectly 結束花括號放置合理的空格
1五、 SA1014:OpeningGenericBracketsMustBeSpacedCorrectly 同上
1六、 SA1015:ClosingGenericBracketsMustBeSpacedCorrectly 同上
1七、 SA1016:OpeningAttributeBracketsMustBeSpacedCorrectly 特性開始括號同上
1八、 SA1017:ClosingAttributeBracketsMustBeSpacedCorrectly 特性結尾括號同上
1九、 SA1018:NullableTypeSymbolsMustNotBePrecededBySpace 空類型前不放置空格
20、 SA1019:MemberAccessSymbolsMustBeSpacedCorrectly 成員訪問關鍵字先後有空格
2一、 SA1020:IncrementDecrementSymbolsMustBeSpacedCorrectly 自增、自減關鍵字要有空格
2二、 SA1021:NegativeSignsMustBeSpacedCorrectly 負號要有空格
2三、 SA1022:PositiveSignsMustBeSpacedCorrectly 正號要有空格
2四、 SA1023:DereferenceAndAccessOfMustBeSpacedCorrectly
2五、 SA1024:ColonsMustBeSpacedCorrectly 冒號運算符要有空格
2六、 SA1025:CodeMustNotContainMultipleWhitespaceInARow 同一行不容許出現多個空格
2七、 SA1026:CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation new關鍵字以後不容許出現空格
2八、 SA1027:TabsMustNotBeUsed 不用tab字符(我的不建議採用這條)