惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
宝玉的分享
宝玉的分享
I
InfoQ
P
Privacy International News Feed
V
V2EX
IT之家
IT之家
S
SegmentFault 最新的问题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V2EX - 技术
V2EX - 技术
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
The Register - Security
The Register - Security
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
AWS News Blog
AWS News Blog
M
MIT News - Artificial intelligence
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
B
Blog
N
Netflix TechBlog - Medium
B
Blog RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
T
Threatpost
Forbes - Security
Forbes - Security
U
Unit 42
A
Arctic Wolf
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recorded Future
Recorded Future
L
Lohrmann on Cybersecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
月光博客
月光博客
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
I
Intezer
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
MyScale Blog
MyScale Blog
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
量子位

博客园 - Frank.Cui

Scriban语言手册中文版 开源文件服务器file-service介绍 记一次redis病毒分析笔记 推荐一个比FiddlerCore好用的HTTP(S)代理服务器 适用于 Windows 10 的触摸板手势 vi命令示例大全 Linux系统中的常用命令 解决Protobuf生成的C#代码命名不规范问题 使用Markdown写作 DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架 推荐一款好用的WSL终端模拟器 使用ssh公钥密钥自动登陆linux服务器 自动化CodeReview - ASP.NET Core请求参数验证 Fiddler插件开发 - 实现网站离线浏览功能 自动化CodeReview - ASP.NET Core依赖注入 10个有关RESTful API良好设计的最佳实践 ASP.NET Core 获取控制器上的自定义属性 [转] Autofac创建实例的方法总结 PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)
使用StyleCop.Analyzers进行代码审查
Frank.Cui · 2017-02-27 · via 博客园 - Frank.Cui

为什么要进行代码审核?

  1. 提早发现代码中的BUG,避免将BUG带到生产环境
  2. 极大的提高软件质量,以及可维护性
  3. 统一代码规范、提高可读性,减少新加入成员的熟悉时间
  4. 加速个人和团队的成长,知识和经验的积累

StyleCop.Analyzers介绍
  代码审查的方式有很多种,大体上分为人工审查和工具审查,这里我们只说工具审查。

StyleCop是微软的一款代码审查工具,使用它可以检查代码中的各类静态编程规范错误,从代码注释,代码布局,可维护性,命名规范,可读性等各方面对代码规范性进行检查。
重要的是,其规则可以自定义,可以屏蔽掉不适用于特定项目的规则,甚至可以自定义开发适用于各自项目的规则,它有3种使用方式:

  1. 作为VS扩展使用
  2. 作为ReSharper插件
  3. 与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个

  1. 规则集文件(例如:rules.ruleset),其作用为:
    • 开启或关闭特定规则
    • 配置指定规则满足时引发的错误级别,例如:错误、警告、信息等
  2. 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" ]
  }

如果内置规则无法满足您的需求您还可以自定义审查规则,然后在规则集里配置,这里先埋个坑下篇再具体讲。