StyleCop(C#代码检测工具)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StyleCop(C#代码检测工具)相关的知识,希望对你有一定的参考价值。

一、StyleCop是微软的一个开源的静态代码分析工具,检查c#代码一致性和编码风格。

二、下载地址   http://stylecop.codeplex.com/releases/view/79972

  默认安装目录:C:\\Program Files (x86)\\StyleCop 4.7

  自己定义的dll规则也放在这个目录下

三、使用方式:打开VS之后选择一个类或者一个类库右击

技术分享

RunStyleCop运行结果:

技术分享

四:编写自己的规则:

1、创建一个类库,

  新建一个MyCustomAnalyzer.cs文件,引用StyleCop.dll和StyleCop.Csharp.dll

  代码如下:

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;  
        }  
    }  
  
}  
AddViolation方法中的三个参数"AvoidUsingAInClassNames"是自己定义的规则,这个规则就是下文xml中的 Rule Name="AvoidUsingAInClassNames"

2、新建一个和类同名的xml文件

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

  设置该xml文件属性:编译方式为嵌入式 (即编译到dll中),Rules中可以放多个Rule但不要忘了改Name和Id

 3、保存并编译

  将这个项目生成DLL,把MyCustomAnalyzer.dll放到StyleCop根目录下。到此自定义规则就完成了。

4、使用自己的规则:

  打开VS之后选择一个类或者一个类库右击,选择 StyleCop Settings设置规则,这里可以看到自己新添的规则。

技术分享

 

以上是关于StyleCop(C#代码检测工具)的主要内容,如果未能解决你的问题,请参考以下文章

C# 代码规范和质量检查工具 StyleCop.Analyzers

C# 代码规范和质量检查工具 StyleCop.Analyzers

SonarScanner (C#) 不支持代码内 StyleCop 警告抑制

StyleCop学习笔记——初识StyleCop

C# - StyleCop - SA1121:UseBuiltInTypeAlias - 可读性规则

代码规范工具