StyleCop(C#代码检测工具)

摘要:
=ElementType.Class)returntrue;//检查类名是否包含“a”letterClassclassElement=元素;如果{//addviolation//addviolation;}//继续对话,以找到所有类都不为true;}}AddViolation方法中的三个参数“AvoidUsingAInClassNames”是自定义规则。此规则在以下xml中为RuleName=“AvoidUsingAInClassNames”。2.创建一个与类MyCustomAnalyzer.xml同名的新xml文件。内容如下:

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

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

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

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

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

StyleCop(C#代码检测工具)第1张

RunStyleCop运行结果:

StyleCop(C#代码检测工具)第2张

四:编写自己的规则:

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#代码检测工具)第3张

免责声明:文章转载自《StyleCop(C#代码检测工具)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇电脑网络诊断显示Win10无法与设备或资源(DNS)通信解决办法alter session set current_schema 指令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt 将界面程序封装成动态库DLL

1.生成dll 然后选择创建共享库: 创建好后,修改pro文件,改为下面两句(这样就可以创建界面了): 然后修改sharedlib.h: #ifndef SHAREDLIB_H #define SHAREDLIB_H #include <QtCore/qglobal.h> #if defined(SHAREDLIB_LIBRARY...

VC++通过动态生成并加载DLL,实现可执行文件的自删除

void WriteResourceToFile(HINSTANCE hInstance,int idResource,char const *filename) { // 存取二进制资源 HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(idResour...

在C++ 中 如何调用 C# 写的DLL(转载)

对于很多和我一样的老C++程序员来讲,如果不能与时俱进,不但会倍感失落,还会真的自绝于天下。比如C#有很多好的组件, 如NPOI ,如。。。,怎么在C++中也自如调用呢,这样不用去学习C#,不用换刀,也可以达到同样的目的。网上看了半天,找到的资料要么太老,要么不对,干脆自己调试一遍。下面把体会说一说。调试环境:visual studio 2010 .时间:...

调用Interop.zkemkeeper.dll无法使用解决方案

调用Interop.zkemkeeper.dll无法使用 已经注册dll成功但是还是报错 检索 COM 类工厂中 CLSID 为 {00853A19-BD51-419B-9269-2DABE57EB61F} 的组件时失败,原因是出现以下错误: 80040154。 private CZKEMClass mechineRoom = newCZKEMCla...

无法删除DLL文件解决方法(转)

无法删除DLL文件解决方法(转) 手动解决dll文件无法删除的终极方法 手动解决dll文件无法删除的终极方法 相信大家都遇见过:在删除一些软件的时候弹出某某文件正在运行或磁盘写保护不能删除这样的报错提示吧。而常常删除不掉的都一些后缀为.dll的文件。到底这个dll文件是什么文件,如何才能知道是哪些程序在调用这个dll文件呢? [基础理论]dll文件英文...

【域渗透】域权限维持

一、ssp密码记录 ssp(security Support Provider),一个用于身份验证的 dll,系统在启动时 SSP 会被加载到 lsass.exe 进程中,由于 lsa 可扩展,导致在系统启动时我们可以加载一个自定义的 dll,一个用于记录所有登录到当 前系统的明文账号密码的 dll, 利用mimikatz 中mimilib.dll 文件。...