StyleCop学习笔记——自定义规则

本文将简单的一步一步的指导这可能有助于学习如何创建自己的规则

1、创建一个项目。

Visual Studio创建一个新的类库项目.NET3.5

2、引用两个DLL,StyleCop.dll和StyleCop.Csharp.dll.

3、添加自定义的规则。

MyCustomAnalyzer.cs代码如下:

 

  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. }  
using StyleCop;
using StyleCop.CSharp;

namespace MyCustomRules
{
	/// <summary>
	/// Custom analyzer for demo purposes.
	/// </summary>
	[SourceAnalyzer(typeof(CsParser))]
	public class MyCustomAnalyzer : 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文件,命名和上面类的名字一样。

把以下内容写到MyCustomAnalyzer.xml文件中

 

  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>  
<?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>不能用A字母</Context>
			<Description>Fires when 'a' letter is used in class name.</Description>
		</Rule>
	</Rules>
</SourceAnalyzer>

 

5、构建

将这个项目生成DLL,把MyCustomAnalyzer.dll放到StyleCop根目录下。

6、部署

打开一个我们要测试的项目代码。点击StyleCop Setting设置用我们的MyCoustomRule。

7、点击RunStyleCop在错误警告列表就会显示检测出来的规则验证。如图:

 

http://blog.csdn.net/gwblue/article/details/25003031

posted on 2016-05-27 16:09  chen110xi  阅读(978)  评论(0编辑  收藏  举报