.Net 代码分析工具对比 visual studio 2022 current

原因

最近要开展新项目,由于是新项目,公司之前没制定规范,以及强制规定使用代码整理工具,领导要我看看代码规范,以及选一个代码整理工具,给了一个叫CodeMaid的开源软件,和一篇 2018年的文章: 好代码是管出来的——.Net中的代码规范工具及使用,于是我便开始了研究起来。

背景知识

名词解释

翻译自 Roslynator 对于Analyzers 和 Refactorings的解释

词条 描述
分析器 Analyzer 生成有关与代码风格相关的并且要遵守的规则
诊断器 Dignostic 显示出特定的有分析器发现的代码问题
代码修复 Code Fix 显示出报告出来的代码问题的修复操作
代码重构 Refactoring 针对给定文本范围按需提供单个操作(个人感觉都是不涉及代码风格的重构,比如方法提取,字符串常量化

分析器

分析器在后台运行,并且分析源代码。当它发现有代码不遵循规则,就会报告给诊断器,诊断器就会把结果展示在IDE上(错误列表,建议),如果能修复的话,就会由给出一个代码修复建议。

分析器在IDE里

“错误列表”中显示所有诊断信息。在代码编辑器中,每个诊断都是可见的。标记为隐藏的诊断程序是不可见的。
热键Ctrl +. 或者Alt + Enter将显示可用的代码修复。代码修复优先于重构,所以它们首先显示。在飞行菜单中有一个标识符和一个描述。还有“抑制”项在上下文菜单的底部。

image
image

目标

上一家公司用的是收费的 CodeRush,(后来自己包装的 FixCop + StyleCop)插件,现在这家公司本来也有尝试过收费的ReSharper, 发现很卡,而且提示高亮等和VS 本身的也有冲突等原因弃用。
所以我总结了一下,我需要找的工具需要以下特点,优先级由高到低排序:

  • 免费 (公司买过Resharper,现在没有这方面预算,申请也麻烦)
  • 轻量级 (Resharper 太卡了)
  • 功能全面开箱即用(最好囊括 Analyzer, code fix, Refactoring,自定义规则)
  • 长期开源支持(因为在查找过程中,发现好多个工具已经不维护了)
  • Azure Devops 集成
  • .Net 6支持

查找思路及过程

首先排除收费的: Resharper, CodeRush, SnarQube

CodeMaid

接下来就去安装了领导提了一嘴的CodeMaid的开源软件,总体感觉不错,插件安装,可视化配置,类StyleCop的代码整理。但是,好像只有代码风格类的规则,没有发现有关代码质量类的(比如建议枚举有0值,泛型参数过多啥的。)看到这里,基本先可以放一边,看其他的先了,其他实在拉跨再回来详细看看这款。

接下来也没什么好的方法,看了文章: 好代码是管出来的——.Net中的代码规范工具及使用,大致就分为两大类,一个是基于 Roslyn的,一个是其他。

Roslyn

首先Roslyn,这个先跳过,功能确实强大,但太底层了,我现在也没有时间精力去封装一个高级可用的代码分析工具。有空后值得专门写一篇 写一系列文章去介绍它。

StyleCop.Analyzer

虽然上一家公司用的是 StyleCop + FixCop封装, 但发现自己也只是使用,怎么安装,怎么设置规则都不了解,有必要从下载安装开始体验一下。

StyleCop? StyleCop.Analyzer!

这个有必要了解一下,因为我也是这几天才知道的,StyleCop已经被弃用了,现在只用于vs2015(C#6)以及之前。vs2015以及之后的建议用 StyleCop.Analyzer
附上 github StyleCop 项目声明译文:

注意事项
虽然pull request将继续被接受,但不太可能在这个项目上进行任何重大开发(包括对更新的c#语法的支持)。维护StyleCop使用的定制c#解析器越来越困难,效率也越来越低。最近进行维护工作的主要动机是允许已经在使用StyleCop的开发人员升级到Visual Studio 2015和c# 6。
强烈建议只使用Visual Studio 2015或更高版本的开发人员使用基于roslyn的StyleCopAnalyzers项目。

快速安装试用

废话不多说,根据文章: [好代码是管出来的——.Net中的代码规范工具及使用](https://www.cnblogs.com/selimsong/p/9209254.html#codeMaid "好代码是管出来的——.Net中的代码规范工具及使用"),通过NuGet下载安装最新版,就尝试一个项目,不管多项目配置先。image

本来只有两个警告:
image

一安装完,vs错误框就多出了许多警告了,我们可以设置规则的警告级别,比如字段名下划线开头的警告,比如我现在不需要检测 字段是否下划线开头,就可以禁用它,但没有像参考文章那样有ruleset文件产生,却有文章说的另外一个东东叫.editorConfig文件产生,估计是新版vs2022集成了.editorConfig了。
image

小结

  • 我好像记得 上一家公司包装StyleCop后,可以按快捷键后,自动做出一些修改,比如自动加了头文件啥的,这里不会,估计要继续研究细致一些,可以记一个TODO
  • vs2022 分析器打不开,不知道哪里出问题了,不过不影响使用,因为.net core项目根本都没有打开选项,直接展开后右键详细规则就可以单独设置image
  • json配置文件啥的没有详细体验了,如果后面没有更好的工具再回过头详细看看。

FxCop? NetAnalyzers!

因为上一家公司用的是 StyleCop + FixCop封装,StyleCop在github上有,我以为FxCop也是在github上的, github 找了半天fxcop,都没有。Google了一下,才知道 FxCop是微软提供的工具,没有开源,而且也没有更新了,官网文档有关旧版 FxCop 和 .NET 分析器的常见问题上面有说明。

快速安装试用

看了官方文档,知道.net 5 及以后SDK会自动有这个分析器,我也去创建了一个.net6的控制台程序,发现分析器里确实自带有image
.net5之前的可以在NuGet包里搜 NetAnalyzers,但官方还是建议SDK image

创建项目后,展开分析器里的两个netAnalazerimage
可以看到里面的具体规则,有代码样式的,有关于代码质量的,更改其中一个警告等级,也会有.editorConfig文件。
image

小结

  • .net framwork 4.8和.net 5+的项目属性里代码分析已经大不一样了,4.8虽然也生成了.editorConfig文件,但项目属性的代码分析还是显示规则集(ruleset文件)的设置,具体和editorConfig是那个生效我还没试验,而.net 5+ 已经没有ruleset设置,而是设置一些是否启动分析器的问题。
    image
    image
  • 刚刚上面在研究StyleCop说的TODO文件头描述问题,官方文档已经给出答案,也是通过editorConfig
  • 看官方文档 overview,给出了第三方分析器,除了官方 .NET 分析器外,你也可以安装第三方分析器,如 StyleCop、Roslynator、XUnit Analyzers 和 Sonar Analyzer。

Roslynator

在Github 里搜了一下关键字“Roslyn", 发现一个2k+ 星星的项目,叫Roslynator, 看介绍,是由Roslyn提供的500多个分析程序、重构和c#修复程序的集合。第一感觉这个功能强大,500多个analyzer,应该包含代码样式,代码质量啥的,有Nuget包,visulstudio插件,vscode插件。估计会是候选项目之一。里面文档介绍了 analyzer code fix 和 refectoring的区别,我已贴在开头背景知识里。Roslynator的重构也会在错误列表里提示。
但安装了插件后,分析器里没找到,只在工具-> 选项那里配置,估计安装Nuget包就可以在分析器里找到。
image

结论

  • 看到第三方分析器的时候,我恍然大悟,原来在VS2022 current里面,自带的 .net SDK包含了一个比较完整的代码分析,诊断,修复解决方案了,默认用editorConfig作为配置文件。兼容第三方分析器!
    那基本可以确定,visual studio 2022 自带的SDK代码分析器已经是比较理想的选择了。如果不够,再选择性的添加第三方的分析器,比如现在需要做WPF项目,我在StyleCop项目账号里发现,和WPF相关的第三方分析器项目:WpfAnalyzerPropertyChangedAnalyzers
  • 初步先定默认的分析器就够了,不够的话以后着重看看 Roslynator的分析器规则。
  • 当然,分析器不是多多益善,代码质量还是离不开队员认真尽责的代码审查。
  • 下一步着重看一下Visual Studio自带的分析器规则。估计要一条一条的看,心里才有底。

后记

  • 从业6年了,感觉自己有进步,但进步不大,也一直没输出过什么技术类的文章,今天算是开了个头吧,以后有意识的保持输出吧😄
  • 研究速度还是慢了的,前后花掉了一个星期,才水出这篇文章,你们看我文章写的顺序就知道了,杂乱无章,正确的应该先看.net analyzer分析器才对。反思了一下,就是一开始沉入了某一个工具里去了,也没及时看官方文档(官方文档以及非常详细了)。
  • .Net 6出来了,之前的5以及更早之前的 core 3.1 等版本都没怎么体验过,走马观花的看了别人的文章就算了,印象不深刻,自己动手安装试验了一番,感概现在的方案还是很轻便强大!纸上得来终觉浅,绝知此事要躬行!
posted @ 2021-11-16 23:59  songjiefa  阅读(2444)  评论(0编辑  收藏  举报