天天看點

C#靜态代碼檢查工具StyleCode

C#靜态代碼檢查工具StyleCode -- 初探

最近我們Advent Data Service (ADS) 在項目上需要按照代碼規範進行代碼的編寫工作,以友善将來代碼的閱讀與維護。

但是人工檢查起來容易遺漏或者格式不統一, ReSharper又是收費的,而且費用不菲。

于是美國的同僚推薦了我們一款開源工具 StyleCop,我想無論是對公司項目還是個人的項目,都是有所幫助的,是以想寫下來與大家分享。

StyleCop官網位址:http://stylecop.codeplex.com/, 這裡有大家需要的msi安裝檔案,源代碼和說明文檔等資源。

  • 現在最新的版本是 4.7.50,這是一個Alpah版本,支援Visual Studio 2015 (暫時不支援C# 6.0的文法)
C#靜态代碼檢查工具StyleCode
  • StyleCop有兩種安裝方式
    • 直接在官網下載下傳msi安裝程式,輕按兩下安裝
    • 在Visual Studio中,Tools --> Extensions and Updates… --> Extensions and Updates… --> Online --> 搜尋stylecop,找到Visual StyleCop并安裝
C#靜态代碼檢查工具StyleCode
  • 安裝完成之後,打開Visual Studio并打開一個項目,右鍵選擇一個Project,會發現多了三個選項
C#靜态代碼檢查工具StyleCode
  • Run StyleCop與Run StyleCop(Rescan All)會審查已有代碼,并且在Error List中顯示代碼中不符合規範的Warning

第一個圖是執行了Run StyleCop的Error List, 第二個圖是執行了Build的Error List

C#靜态代碼檢查工具StyleCode
C#靜态代碼檢查工具StyleCode
  • StyleCop Setting:在實際項目中,可能現有的規則并不适用于我們的項目,需要我們自己通過StyleCop Setting進行配置
C#靜态代碼檢查工具StyleCode

以上都是StyleCop的基本功能,希望能對大家有所幫助,也歡迎大家進行交流讨論。

Tips: 在Visual Studio中,規範化C#項目代碼格式的快捷鍵是Ctrl + k,再按一下Ctrl + d。在編寫完代碼後,按下這個組合,代碼就會規規矩矩的排列了☺

C#靜态代碼檢查工具StyleCode -- 規則解析

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

Documentation Rules 注釋規則

  • SA1600:ElementsMustBeDocumented元素必須添加注釋
  • 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 屬性的注釋中必須包含節點
  • SA1610:PropertyDocumentationMustHaveValueText 屬性的注釋節點必須包含文本值
  • SA1611:ElementParametersMustBeDocumented 參數必須注釋
  • SA1612:ElementParameterDocumentationMustMatchElementParameters 參數的個數必須與注釋裡的個數一緻
  • SA1613:ElementParameterDocumentationMustDeclareParameterName 參數的注釋裡必須有參數的名稱
  • SA1614:ElementParameterDocumentationMustHaveText 參數注釋節點裡不能空着
  • SA1615:ElementReturnValueMustBeDocumented 傳回值必須添加注釋
  • SA1616:ElementReturnValueDocumentationMustHaveText 傳回值注釋的節點内必須有文本值
  • SA1617:VoidReturnValueMustNotBeDocumented 空傳回值一定不能有傳回值注釋
  • SA1618:GenericTypeParametersMustBeDocumented 生成的類型(泛型)參數必須有注釋
  • SA1619:GenericTypeParametersMustBeDocumentedPartialClass SA1618情況如果有Partial類存在都要有注釋
  • SA1620:GenericTypeParameterDocumentationMustMatchTypeParameters 注釋與泛型必須能比對上
  • SA1621:GenericTypeParameterDocumentationMustDeclareParameterName 泛型的注釋必須包含泛型定義是的關鍵字(如’T’)
  • SA1622:GenericTypeParameterDocumentationMustHaveText 泛型的注釋節點中必須包含文本值
  • SA1623:PropertySummaryDocumentationMustMatchAccessors 屬性的注釋必須與屬性的讀寫權限比對,private類型的屬性不能出現在注釋裡
  • SA1624:PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess 屬性的注釋裡必須忽略protected關鍵字,當成public類型當注釋
  • SA1625:ElementDocumentationMustNotBeCopiedAndPasted 各個參數的注解不能完全相同(避免copy、post行為)
  • SA1626:SingleLineCommentsMustNotUseDocumentationStyleSlashes 單行注釋不能采取三個斜線的注釋方式,斜線的個數必須是二的倍數
  • SA1627:DocumentationTextMustNotBeEmpty 注釋節點内部不能為空(必須有文本值)
  • SA1628:DocumentationTextMustBeginWithACapitalLetter 注釋節點内部的文本必須以大寫字母開頭
  • SA1629:DocumentationTextMustEndWithAPeriod 注釋節點内部的文本必須英文的句号結束
  • SA1630:DocumentationTextMustContainWhitespace 注釋節點内部的文本必須包含空格
  • SA1631:DocumentationMustMeetCharacterPercentage 注釋節點内部的文本中不能包含過多的字元(舉例:包含’—————————————’是不允許的)
  • SA1632:DocumentationTextMustMeetMinimumCharacterLength 已經廢棄的規則,不允許有太短的字元串(如’A name’ 中的A字母)
  • SA1633:FileMustHaveHeader 代碼檔案頭部必須有說明,一般放置版權資訊
  • SA1634:FileHeaderMustShowCopyright 代碼檔案頭部注解中必須包含版權關鍵字
  • SA1635:FileHeaderMustHaveCopyrightText代碼檔案頭部注解中必須包含版權資訊内同
  • SA1636:FileHeaderCopyrightTextMustMatch 代碼檔案頭部注解中版權資訊必須與設定畫面設定的内容相比對,在”style seting”畫面的” Company Information tab”進行設定
  • SA1637:FileHeaderMustContainFileName 代碼檔案頭部注解中必須包含檔案名稱
  • SA1638:FileHeaderFileNameDocumentationMustMatchFileName 代碼檔案頭部注解中必須包含檔案名稱必須與實際的名稱比對
  • SA1639:FileHeaderMustHaveSummary 代碼檔案頭部注解中必須包含Summary節點
  • SA1640:FileHeaderMustHaveValidCompanyText 代碼檔案頭部注解中版權資訊必須含有合理的公司名字
  • SA1641:FileHeaderCompanyNameTextMustMatch 代碼檔案頭部注解中的公司名字必須與設定畫面設定的内容相比對,在”style seting”畫面的” Company Information tab”進行設定
  • SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText 構造函數注釋标準:“Initializes a new instance of the class.”
  • SA1643:DestructorSummaryDocumentationMustBeginWithStandardText 析構函數注釋标準:“Finalizes an instance of the class.”
  • SA1644:DocumentationHeadersMustNotContainBlankLines 注釋中不能出現空白行
  • SA1645:IncludedDocumentationFileDoesNotExist 如果注釋中包含檔案,要确定這個檔案存在,舉例:“ /// ” 這一項過于複雜不建議用,但是如果将來想規範化相同共性東西的注釋的時候倒是可以考慮引入。
  • SA1646:IncludedDocumentationXPathDoesNotExist 如果注釋中包含檔案,路徑不存在。
  • SA1647:IncludeNodeDoesNotContainValidFileAndPath 如果注釋中包含檔案 檔案與路徑都要合法
  • SA1648:InheritDocMustBeUsedWithInheritingClass 這項不明白是什麼意思,還請知道的分享給我,謝謝。
  • SA1649:FileHeaderFileNameDocumentationMustMatchTypeName 檔案頭注釋必須比對類型
  • SA1650:ElementDocumentationMustBeSpelledCorrectly 注釋不能有拼寫錯誤(對中文支援不好,不建議使用該項)

Layout Rules 布局規則

  • 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語句之間不能有空白行
  • SA1512:SingleLineCommentsMustNotBeFollowedByBlankLine 單行注釋不能後跟空白行
  • SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine 結束花括弧之後必須有一個空白行
  • SA1514:ElementDocumentationHeaderMustBePrecededByBlankLine 頭部注解之前必須有一個空白行
  • SA1515:SingleLineCommentMustBePrecededByBlankLine 單行注釋之前要有一個空白行,還一種方法是不加空白行而用四個斜線注釋”////”,建議采取第一種方法
  • SA1516:ElementsMustBeSeparatedByBlankLine 鄰近的元素之間要有一個空白行
  • SA1517:CodeMustNotContainBlankLinesAtStartOfFile 代碼檔案頭部字元之前不能出現空白行
  • SA1518:CodeMustNotContainBlankLinesAtEndOfFile代碼檔案尾部字元之後不能出現空白行

Maintainability Rules 可維護規則

  • 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#匿名方法不包含任何方法參數,必須要包括一個空括号(本人不建議使用匿名方法、匿名委托的文法,具體原因後續做分享)
  • SA1411:AttributeConstructorMustNotUseUnnecessaryParenthesis 特性構造函數如果是空參的形式,不要包括那個空括号

Naming Rules 命名規則

  • 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字段首字母大寫

Ordering Rules 排序規則

  • 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 别名的按照别名的字母編排
  • SA1212:PropertyAccessorsMustFollowOrder 屬性按照先get在set
  • SA1213:EventAccessorsMustFollowOrder 時間先remove在add
  • SA1214:StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements StaticReadonly元素在StaticNonReadonly元素之前
  • SA1215:InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements 一個readonly 執行個體元素要在一個非readonly 執行個體元素

Readability Rules 可讀性規則

  • 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 方法結束括弧與最後一個參數同行
  • SA1112:ClosingParenthesisMustBeOnLineOfOpeningParenthesis 如果是空參的情況,開始于結束括弧在同一行
  • SA1113:CommaMustBeOnSameLineAsPreviousParameter 逗号必須與前一個參數同行
  • SA1114:ParameterListMustFollowDeclaration 確定參數清單與開始括号同行,或者另起一行 參數整體要在同一行
  • SA1115:ParameterMustFollowComma 參數與參數之間不能隔空白行
  • SA1116:SplitParametersMustStartOnLineAfterDeclaration 所有參數在同一行或者如下示例:
    public string JoinName(
    
    
            string first, 
    
    
            string last)
               
  • SA1117:ParametersMustBeOnSameLineOrSeparateLines 同上
  • SA1118:ParameterMustNotSpanMultipleLines 實際調用是參數要在同一行
  • SA1120:CommentsMustContainText 注釋必須節點内部必須有文本
  • SA1122:UseStringEmptyForEmptyStrings
    示例代碼:“string s = string.Empty;”不能寫成” string s = ""; ”
               
  • SA1123:DoNotPlaceRegionsWithinElements 不使用region(個人較反對這條,個人傾向于用region規整類裡的元素)
  • SA1124:DoNotUseRegions 不使用region(個人較反對這條,個人傾向于用region規整類裡的元素)
  • SA1125:UseShorthandForNullableTypes 使用簡寫版的可空類型 如”int?”
  • SA1126:PrefixCallsCorrectly 調用類成員的時候要帶上“this”字首

Spacing Rules 拼寫規則

  • 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 結束方括号放置合理的空格
  • SA1012:OpeningCurlyBracketsMustBeSpacedCorrectly 開始花括号放置合理的空格
  • SA1013:ClosingCurlyBracketsMustBeSpacedCorrectly 結束花括号放置合理的空格
  • SA1014:OpeningGenericBracketsMustBeSpacedCorrectly 同上
  • SA1015:ClosingGenericBracketsMustBeSpacedCorrectly 同上
  • SA1016:OpeningAttributeBracketsMustBeSpacedCorrectly 特性開始括号同上
  • SA1017:ClosingAttributeBracketsMustBeSpacedCorrectly 特性結尾括号同上
  • SA1018:NullableTypeSymbolsMustNotBePrecededBySpace 空類型前不放置空格
  • SA1019:MemberAccessSymbolsMustBeSpacedCorrectly 成員通路關鍵字前後有空格
  • SA1020:IncrementDecrementSymbolsMustBeSpacedCorrectly 自增、自減關鍵字要有空格
  • SA1021:NegativeSignsMustBeSpacedCorrectly 負号要有空格
  • SA1022:PositiveSignsMustBeSpacedCorrectly 正号要有空格
  • SA1023:DereferenceAndAccessOfMustBeSpacedCorrectly
  • SA1024:ColonsMustBeSpacedCorrectly 冒号運算符要有空格
  • SA1025:CodeMustNotContainMultipleWhitespaceInARow 同一行不允許出現多個空格
  • SA1026:CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation new關鍵字之後不允許出現空格
  • SA1027:TabsMustNotBeUsed 不用tab字元(個人不建議采用這條)

C#靜态代碼檢查工具StyleCode -- 自定義規則

本文将簡單的一步一步的指導這可能有助于學習如何建立自己的規則

1、建立一個項目。

Visual Studio建立一個新的類庫項目.NET3.5

2、引用兩個DLL,StyleCop.dll和StyleCop.Csharp.dll.

3、添加自定義的規則。

MyCustomAnalyzer.cs代碼如下:

[csharp] view plain copy

  1. using StyleCop;  
  2. using StyleCop.CSharp;  
  3. namespace MyCustomRules  
  4. {  
  5.     /// <summary>  
  6.     /// Custom analyzer for demo purposes.  
  7.     /// </summary>  
  8.     [SourceAnalyzer(typeof(CsParser))]  
  9.     public class MyCustomAnalyzer : SourceAnalyzer  
  10.     {  
  11.         /// <summary>  
  12.         /// Extremely simple analyzer for demo purposes.  
  13.         /// </summary>  
  14.         public override void AnalyzeDocument(CodeDocument document)  
  15.         {  
  16.             CsDocument doc = (CsDocument)document;  
  17.             // skipping wrong or auto-generated documents  
  18.             if (doc.RootElement == null || doc.RootElement.Generated)  
  19.                 return;  
  20.             // check all class entries  
  21.             doc.WalkDocument(CheckClasses);  
  22.         }  
  23.         /// Checks whether specified element conforms custom rule CR0001.  
  24.         private bool CheckClasses(  
  25.             CsElement element,  
  26.             CsElement parentElement,  
  27.             object context)  
  28.             // if current element is not a class then continue walking  
  29.             if (element.ElementType != ElementType.Class)  
  30.                 return true;  
  31.             // check whether class name contains "a" letter  
  32.             Class classElement = (Class)element;  
  33.             if (classElement.Declaration.Name.Contains("a"))  
  34.             {  
  35.                 // add violation  
  36.                 // (note how custom message arguments could be used)  
  37.                 AddViolation(  
  38.                     classElement,  
  39.                     classElement.Location,  
  40.                     "AvoidUsingAInClassNames",  
  41.                     classElement.FriendlyTypeText);  
  42.             }  
  43.             // continue walking in order to find all classes in file  
  44.             return true;  
  45.     }  
  46. }  

4、添加一個規則的XML檔案,命名和上面類的名字一樣。

把以下内容寫到MyCustomAnalyzer.xml檔案中

[html] view plain copy

  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <SourceAnalyzer Name="My Custom Rule">  
  3.     <Description>  
  4.         Custom rule for demo purposes.  
  5.     </Description>  
  6.     <Rules>  
  7.         <Rule Name="AvoidUsingAInClassNames" CheckId="CR0001">  
  8.             <Context>不能用A字母</Context>  
  9.             <Description>Fires when 'a' letter is used in class name.</Description>  
  10.         </Rule>  
  11.     </Rules>  
  12. </SourceAnalyzer>  

5、建構

将這個項目生成DLL,把MyCustomAnalyzer.dll放到StyleCop根目錄下。

6、部署

打開一個我們要測試的項目代碼。點選StyleCop Setting設定用我們的MyCoustomRule。

7、點選RunStyleCop在錯誤警告清單就會顯示檢測出來的規則驗證。如圖:

繼續閱讀