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

Posted 晨曦歡迎您!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于StyleCop学习笔记——自定义规则的主要内容,如果未能解决你的问题,请参考以下文章

StyleCop学习笔记——初识StyleCop

C# 的 Sonarqube 5.4 自定义规则

SpringCloudGateway 学习笔记 - 自定义过滤器 之 获取响应头

fxcop 自定义规则 - 避免每个文件有多个类

StyleCop的SonarQube插件生成器无法与SonarC#v6一起使用

禁用 StyleCop 规则