好代码是管出来的——.Net中的代码规范工具及使用

Roslyn简介

  Roslyn是一个开源的C#、VB编译器,它提供了丰富的代码分析API,第三方应用可以基于这些API来开发自己的代码分析工具。Roslyn应用在VS2015及以上版本。

开发基于Roslyn的代码分析器

  Roslyn提供了相关的SDK,可以通过SDK来开发自己的代码分析器:
  1. 首先需要安装.Net Compiler Platform SDK:
  VS2017 15.5之前的版本可以通过下面连接下载并安装:
  https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.NETCompilerPlatformSDK
  VS2017 15.5之后的版本可以通过Visual Studio Installer进行安装:

  

好代码是管出来的——.Net中的代码规范工具及使用

  2. 创建一个Analyzer with Code Fix的项目:

  

好代码是管出来的——.Net中的代码规范工具及使用

  3. 分析器代码简介:

代码结构:

  创建的项目中一共有三个子项目,分别是分析器、分析器测试项目以及vsix安装包项目如下图所示:

  

好代码是管出来的——.Net中的代码规范工具及使用

  其中分析器项目中包含了分析器(Analyzer1Analyzer)、代码修复器(Analyzer1CodeFixProvider)和相关的资源(Resources.resx)。

分析器(Analyzer1Analyzer):

  分析器代码的核心内容是注册一个命名符号处理器(用于处理类名、接口名等),处理器的工作是判断分析的符合(名称)中是否包含小写字符,如果包含那么给出诊断信息(诊断信息定义包含在资源文件中)。

  

好代码是管出来的——.Net中的代码规范工具及使用

代码修复器:

  将小写字符转换为大写:

  

好代码是管出来的——.Net中的代码规范工具及使用

代码调试:

  将vsix项目设为启动项目,就可以对分析器进行调试,调试时VS会在沙盘中启动一个新的VS实例,通过这个VS创建一个项目,编写代码时即可看到分析器给出的诊断结果和代码修复:

  

好代码是管出来的——.Net中的代码规范工具及使用

  诊断信息:

  

好代码是管出来的——.Net中的代码规范工具及使用

  修复结果:

  

好代码是管出来的——.Net中的代码规范工具及使用

  查看语法树:

  

好代码是管出来的——.Net中的代码规范工具及使用

常用的基于Roslyn的代码分析器

Microsoft.CodeAnalysis.FxCopAnalyzers:

  FxCop是.Net Framework中用来分析托管代码的应用程序,它主要关注的代码的设计、国际化、可维护性、性能和安全性等方面,并按照这些类别定义了一个规则集:  https://docs.microsoft.com/en-us/visualstudio/code-quality/code-analysis-for-managed-code-warnings
  FxCopAnalyzers安装: https://www.nuget.org/packages/Microsoft.CodeAnalysis.FxCopAnalyzers

StyleCop.Analyzers

  StyleCop本身就是一个用于规范代码格式的工具,所以它的规则也是面向代码格式的,如注释、布局、命名、排序、可维护性、可读性等,StyleCop的规则集参考:https://github.com/DotNetAnalyzers/StyleCopAnalyzers/tree/master/documentation
  StyleCop.Analyzers的项目主页:https://github.com/DotNetAnalyzers/StyleCopAnalyzers

Codecracker.CSharp:

  Codecracker.CSharp也是以个开源的代码分析器,它的规则主要是设计、命名、性能、代码风格、代码使用以及重构,具体参见:
项目主页:https://github.com/code-cracker/code-cracker

  注:Codecracker.CSharp可以通过安装VS拓展工具的方式实现代码分析:https://marketplace.visualstudio.com/items?itemName=GiovanniBassi-MVP.CodeCrackerforC,其它大部分Roslyn分析器需要安装Nuget包。

SonarAnalyzer.CSharp:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsppyp.html