使用StyleCop.Analyzers进行代码审查
为什么要进行代码审核?
- 提早发现代码中的BUG,避免将BUG带到生产环境
- 极大的提高软件质量,以及可维护性
- 统一代码规范、提高可读性,减少新加入成员的熟悉时间
- 加速个人和团队的成长,知识和经验的积累
StyleCop.Analyzers介绍
代码审查的方式有很多种,大体上分为人工审查和工具审查,这里我们只说工具审查。
StyleCop是微软的一款代码审查工具,使用它可以检查代码中的各类静态编程规范错误,从代码注释,代码布局,可维护性,命名规范,可读性等各方面对代码规范性进行检查。
重要的是,其规则可以自定义,可以屏蔽掉不适用于特定项目的规则,甚至可以自定义开发适用于各自项目的规则,它有3种使用方式:
- 作为VS扩展使用
- 作为ReSharper插件
- 与MSBuild集成
由于技术原因StyleCop对于新C#语法的解析越来越困难,因此StyleCop以后仅会进行稳定性维护功能上不会有重大升级。
如果你使用VS2015与C# 6及以上建议使用StyleCop.Analyzers,它是基于Roslyn编译平台重写的。
使用StyleCop.Analyzers
本文以ASP.NET Core项目为例,其它项目大同小异。
使用StyleCop.Analyzers最简单的方式是添加NuGet包,您可以直接在VS里安装StyleCop.Analyzers 或 命令安装 Install-Package StyleCop.Analyzers
添加完成后您需要对它进行配置,配置文件有2个
- 规则集文件(例如:rules.ruleset),其作用为:
- 开启或关闭特定规则
- 配置指定规则满足时引发的错误级别,例如:错误、警告、信息等
- stylecop.json文件,其作用为:
- 配置指定规则的详细参数,例如.cs文件头的copyright内容
- 微调某些规则的行为
下面看一个规则集文件的示例:
- <?xml version="1.0" encoding="utf-8"?>
- <RuleSet Name="Rules for StyleCop.Analyzers" Description="Code analysis rules for StyleCop.Analyzers.csproj." ToolsVersion="14.0">
- <Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.CSharp.NamingRules">
- <Rule Id="SA1300" Action="Error" />
- </Rules>
- </RuleSet>
其中SA1300表示规则ID,您可以在这里找到StyleCop.Analyzers内置的所有规则ID:https://github.com/DotNetAnalyzers/StyleCopAnalyzers/tree/master/documentation
Action="Error"表示满足此规则时让编译器产生错误,效果如下图:
Action可以取值:None | Error | Warning | Info | Hidden
规则集定义的详细信息请参见:https://msdn.microsoft.com/zh-cn/library/dd264996.aspx
下面看一个stylecop.json文件的示例:
- {
- "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
- "settings": {
- "documentationRules": {
- "documentInternalElements": false,
- "documentExposedElements": false
- }
- }
- }
其中documentInternalElements表示可见性为internal的接口或类等是否要求写注释,默认为true,我们这里改为了false
具体详细信息请参见:https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/Configuration.md
接下来需要将规则集、stylecop.json文件与项目关联起来,在project.json文件的buildOptions中增加additionalArguments,例如:
- "buildOptions": {
- "emitEntryPoint": true,
- "xmlDoc": true,
- "additionalArguments": [ "/ruleset:../../StyleCop/rules.ruleset", "/additionalfile:../../StyleCop/stylecop.json" ]
- }
如果内置规则无法满足您的需求您还可以自定义审查规则,然后在规则集里配置,这里先埋个坑下篇再具体讲。
使用StyleCop.Analyzers进行代码审查的更多相关文章
- C# 代码规范和质量检查工具 StyleCop.Analyzers
简介 原来一直用 ReSharper 来进行代码质量检查,不过毕竟是收费的,所以想找个免费的可以推广给公司的同事也一起用.搜索了一下,找到了StyleCop,但是我在 VS 2015里安装 Style ...
- 《代码整洁之道》(Clean Code)- 读书笔记
一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...
- 用StyleCop规范团队代码
前言 编码风格,每个人都是有不同的特点,风格各异,而且一个人在不同的时期,编码风格的差异也可能是非常大的,好比学生时代,刚工作的时候,工作一段时间后等. 在一个团队中,或一个项目中,如果出现了N种风格 ...
- asp.net core 中使用StyleCop.StyleCopAnalyzers
1.nuget中安装 StyleCop.Analyzers 当前版本1.1.0-beta004 2.在项目根目录新增 stylecop.json文件 { "settings": { ...
- 一个适合.NET Core的代码安全分析工具 - Security Code Scan
本文主要翻译自Security Code Scan的官方Github文档,结合自己的初步使用简单介绍一下这款工具,大家可以结合自己团队的情况参考使用.此外,对.NET Core开发团队来说,可以参考张 ...
- 好代码是管出来的——.Net中的代码规范工具及使用
上一篇文章介绍了编码标准中一些常用的工具,本篇就具体来介绍如何使用它们来完成代码管理. 本文主要内容有: Roslyn简介 开发基于Roslyn的代码分析器 常用的基于Roslyn的代码分析器 在.N ...
- 好代码是管出来的——C#的代码规范
代码是软件开发过程的产物,代码的作用是通过编译器编译后运行,达到预期的效果(功能.稳定性.安全性等等),而另外一个重要作用是给人阅读.对于机器来说只要代码正确就能够正确的运行程序,但是人不同,如果代码 ...
- C#(.NET)面试题:做一个能自定义输入命令的表格程序
目前为止,已经面试 5 10 家了... 这个试题面试的公司是某一上市公司. 试题是英文的(后面给出翻译): you're given a task of writing a simple pro ...
- NET Core的代码安全分析工具 - Security Code Scan
NET Core的代码安全分析工具 - Security Code Scan https://www.cnblogs.com/edisonchou/p/edc_security_code_scan_s ...
随机推荐
- SVN本地服务器的搭建
本来一直在研究Git,Github,TortoiseGit,最近一个项目要用到SVN,所有开始着手SVN SVN一般和Tortoise配合使用,windows下一般使用VisualSVN版本 一.安装 ...
- Linux命令之文件处理
文件处理命令 1.dirname命令 dirname命令去除文件名中的非目录部分,仅显示与目录有关的内容.dirname命令读取指定路径名保留最后一个/及其后面的字符,删除其他部分,并写结果到标准输出 ...
- Bmob 之 列表查询
查询列表,返回前20个数据: //创建BmobQuery实例,指定对应要操作的数据表名称 BmobQuery *query = [BmobQuery queryWithClassName:classN ...
- windows svn利用钩子实现代码同步到web目录
思路: 找 到SVN Server中的仓库(Repositories)文件夹的位置,在相应的项目文件夹中找到hooks文件夹.在该文件夹中添加一个post- commit文件:当有commit动作发 ...
- 用js来实现页面的换肤功能(带cookie记忆)
用js来实现页面的换肤功能 js实现换肤功能的实现主要是通过利用js控制CSS来实现的.大致的实现原理是这样的, 1.先定义一个页面基本样式style.css来确定div的宽高等属性,使得整个页面的D ...
- void 0 === undefined
http://www.cnblogs.com/fsjohnhuang/p/4146506.html
- 查看Eclipse版本号,及各个版本区别
查看Eclipse版本号,及各个版本区别 参考:http://blog.csdn.net/gaojinshan/article/details/38903043 查看Eclipse版本号的方法:1.找 ...
- ASP.NET Core MVC/WebAPi如何构建路由?
前言 本节我们来讲讲ASP.NET Core中的路由,在讲路由之前我们首先回顾下之前所讲在ASP.NET Core中的模型绑定这其中有一个问题是我在项目当中遇见的,我们下面首先来看看这个问题. 回顾A ...
- HDU5057(分块)
Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- C++ Primer 笔记 第二章
C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...