C#靜態代碼檢查工具StyleCode

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

最近咱們Advent Data Service (ADS) 在項目上須要按照代碼規範進行代碼的編寫工做,以方便未來代碼的閱讀與維護。c#

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

因而美國的同事推薦了咱們一款開源工具 StyleCop,我想不管是對公司項目仍是我的的項目,都是有所幫助的,因此想寫下來與你們分享。app

 

StyleCop官網地址:http://stylecop.codeplex.com/, 這裏有你們須要的msi安裝文件,源代碼和說明文檔等資源。less

  • 如今最新的版本是 4.7.50,這是一個Alpah版本,支持Visual Studio 2015 (暫時不支持C# 6.0的語法)

 

  • StyleCop有兩種安裝方式
    • 直接在官網下載msi安裝程序,雙擊安裝
    • 在Visual Studio中,Tools --> Extensions and Updates… --> Extensions and Updates… --> Online --> 搜索stylecop,找到Visual StyleCop並安裝

 

 

  • 安裝完成以後,打開Visual Studio並打開一個項目,右鍵選擇一個Project,會發現多了三個選項

 

 

  • Run StyleCop與Run StyleCop(Rescan All)會審查已有代碼,而且在Error List中顯示代碼中不符合規範的Warning

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

   

 

  • StyleCop Setting:在實際項目中,可能現有的規則並不適用於咱們的項目,須要咱們本身經過StyleCop Setting進行配置

 

 

以上都是StyleCop的基本功能,但願能對你們有所幫助,也歡迎你們進行交流討論。函數

 

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

 

C#靜態代碼檢查工具StyleCode -- 規則解析佈局

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

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 -- 自定義規則

本文將簡單的一步一步的指導這可能有助於學習如何建立本身的規則

一、建立一個項目。

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

 

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

三、添加自定義的規則。

MyCustomAnalyzer.cs代碼以下:

 

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

 

四、添加一個規則的XML文件,命名和上面類的名字同樣。

把如下內容寫到MyCustomAnalyzer.xml文件中

 

[html]  view plain  copy
 
 
 
  在CODE上查看代碼片派生到個人代碼片
  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>  

 

五、構建

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

六、部署

打開一個咱們要測試的項目代碼。點擊StyleCop Setting設置用咱們的MyCoustomRule。

七、點擊RunStyleCop在錯誤警告列表就會顯示檢測出來的規則驗證。如圖:

相關文章
相關標籤/搜索