上一篇中介紹如何在Stylecop中新增自定義規則
,這一篇要講解如何自定義規則
主要幾個步驟
1. 新增 .Netframework 3.5專案 並選擇 類別庫
2. 加入參考StyleCop.dll 及 StyleCop.CSharp.dll
    在本機端的Stylecop 則到
    C:\Program Files (x86)\StyleCop 4.7
    在TFS上的Stylecop 則到
    C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\目前使用者名稱
 3. 新增.cs檔加入以下的code

 
using StyleCop;
using StyleCop.CSharp;
namespace MyCustomRules
{
 /// <summary>
 /// Custom analyzer for demo purposes.
 /// </summary>
 [SourceAnalyzer(typeof(CsParser))]
 public class MyCustomRule : SourceAnalyzer
 {
  /// <summary>
  /// Extremely simple analyzer for demo purposes.
  /// </summary>
  public override void AnalyzeDocument(CodeDocument document)
  {
   CsDocument doc = (CsDocument)document;
   // skipping wrong or auto-generated documents
   if (doc.RootElement == null || doc.RootElement.Generated)
    return;
   // check all class entries
   doc.WalkDocument(CheckClasses);
  }
  /// <summary>
  /// Checks whether specified element conforms custom rule CR0001.
  /// </summary>
  private bool CheckClasses(
   CsElement element,
   CsElement parentElement,
   object context)
  {
   // if current element is not a class then continue walking
   if (element.ElementType != ElementType.Class)
    return true;
   // check whether class name contains "a" letter
   Class classElement = (Class)element;
   if (classElement.Declaration.Name.Contains("a"))
   {
    // add violation
    // (note how custom message arguments could be used)
    AddViolation(
     classElement,
     classElement.Location,
     "AvoidUsingAInClassNames",
     classElement.FriendlyTypeText);
   }
   // continue walking in order to find all classes in file
   return true;
  }
 }
}
4. 新增xml檔 - 新增的Xml檔案必須跟.cs檔的檔名一模一樣
xml內容
<?xml version="1.0" encoding="utf-8" ?>
<SourceAnalyzer Name="My Custom Rule">
 <Description>
  Custom rule for demo purposes.
 </Description>
 <Rules>
  <Rule Name="AvoidUsingAInClassNames" CheckId="CR0001">
   <Context>Do not use 'a' letter in {0} names.</Context>
   <Description>Fires when 'a' letter is used in class name.</Description>
  </Rule>
 </Rules>
</SourceAnalyzer>
5. 在xml檔案上按右鍵選擇屬性
,將"建置動作"改為"內嵌資源(Embedded Resource )"
最後一個步驟就是將產生出來的dll檔放入Stylecop資料夾中
使用不同Stylecop放置dll的位置會不同
本機Stylecop C:\Program Files (x86)\StyleCop 4.7
TFS Stylecop C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\目前使用者名稱
沒錯! 就是剛剛複製dll的位置
最後再打開Stylecop規則設定時
,就會看到自己寫的新增規則
Reference:
http://stylecopplus.codeplex.com/wikipage?title=How%20to%20Create%20StyleCop%20Custom%20Rule