原因

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

背景知识

名词解释

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

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

分析器

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

分析器在IDE里

“错误列表”中显示所有诊断信息。在代码编辑器中,每个诊断都是可见的。标记为隐藏的诊断程序是不可见的。

热键Ctrl +. 或者Alt + Enter将显示可用的代码修复。代码修复优先于重构,所以它们首先显示。在飞行菜单中有一个标识符和一个描述。还有“抑制”项在上下文菜单的底部。



目标

上一家公司用的是收费的 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下载安装最新版,就尝试一个项目,不管多项目配置先。

本来只有两个警告:

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

小结

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

FxCop? NetAnalyzers!

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

快速安装试用

看了官方文档,知道.net 5 及以后SDK会自动有这个分析器,我也去创建了一个.net6的控制台程序,发现分析器里确实自带有

.net5之前的可以在NuGet包里搜 NetAnalyzers,但官方还是建议SDK

创建项目后,展开分析器里的两个netAnalazer

可以看到里面的具体规则,有代码样式的,有关于代码质量的,更改其中一个警告等级,也会有.editorConfig文件。

小结

  • .net framwork 4.8和.net 5+的项目属性里代码分析已经大不一样了,4.8虽然也生成了.editorConfig文件,但项目属性的代码分析还是显示规则集(ruleset文件)的设置,具体和editorConfig是那个生效我还没试验,而.net 5+ 已经没有ruleset设置,而是设置一些是否启动分析器的问题。



  • 刚刚上面在研究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包就可以在分析器里找到。

结论

  • 看到第三方分析器的时候,我恍然大悟,原来在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 等版本都没怎么体验过,走马观花的看了别人的文章就算了,印象不深刻,自己动手安装试验了一番,感概现在的方案还是很轻便强大!纸上得来终觉浅,绝知此事要躬行!

.Net 代码分析工具对比 visual studio 2022 current的更多相关文章

  1. C++静态代码分析工具对比cppCheck与PreFast

    具体内容参看文件<CppCheck和PreFast对Cplusplus代码静态分析测试.zip> C++测试源代码main.cpp #define NULL 0 #include < ...

  2. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  3. [转载] 常用 Java 静态代码分析工具的分析与比较

    转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代 ...

  4. 【转载】常用 Java 静态代码分析工具的分析与比较

    摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...

  5. 常用Java静态代码分析工具的分析与比较

    给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...

  6. 乘风破浪,遇见Visual Studio 2022预览版(Preview),宇宙最强开发者工具首次迎来64位版本

    简介 众所周知,我们从官方新闻来看,对Visual Studio 2022最大的期待莫过于:其是首个64位的Visual Studio,这个宇宙最强开发者工具一脚迈入了新的阶段. https://vi ...

  7. 来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧.

  8. .NET6系列:Visual Studio 2022 线路图

    系列目录     [已更新最新开发文章,点击查看详细] 在上一篇博客<Visual Studio 2022>中介绍了VS2022的性能改进与重要功能.本文主要介绍在 Visual Stud ...

  9. Cppcheck 1.54 C/C++静态代码分析工具

    Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型.   官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级4 2.使用GC ...

  10. 阅读代码分析工具Understand 2.0试用

    Understand 2.0是一款源码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实能够大大提高代码阅读效率. 因为Understand功能十分强大,本文不可能详尽地介绍它的全部功能,所 ...

随机推荐

  1. Codeforces Round 922 (Div. 2)(A~D)补题

    A题考虑贪心,要使使用的砖头越多,每块转的k应尽可能小,最小取2,最后可能多出来,多出来的就是最后一块k=3,我们一行内用到的砖头就是\(\frac{m}{2}\)下取整,然后乘以行数就是答案. #i ...

  2. 面试官:线程调用2次start会怎样?我支支吾吾没答上来

    写在开头 在写完上一篇文章<Java面试必考题之线程的生命周期,结合源码,透彻讲解!>后,本以为这个小知识点就总结完了. 但刚刚吃晚饭时,突然想到了多年前自己面试时的亲身经历,决定再回来补 ...

  3. class cl表示 汇聚 集合 ss表示 阴性 这里表示抽象

    class cl表示 汇聚 集合 ss表示 阴性 这里表示抽象

  4. a++和++a的运算区别是?

       a++和++a 都属于自增运算符, 区别是对变量a的值进行自增的时机不同.   a++是先进行取值,后进行自增.++a是先进行自增,后进行取值.  

  5. 基于DSP的光纤麦克风声音采集系统硬件设计方案总结

    前记  光纤声传感器是一种利用光纤作为传光介质或探测单元的一类声传感器,相比传统电声传感器其具有灵敏度高.频带响应宽.抗电磁干扰等优越特性,可广泛应用于国防安全.工业无损检测.医疗诊断及消费电子等领域 ...

  6. ADS1299开发调试总结之寄存器使用说明简析

    一 前记 在生物生理信号测量领域,ads12xx系列是一个无法绕过去的存在.笔者最近几个项目围绕着动物生理信号测量来做.所以用ads12xx比较多一些. 中间遇到了一些问题,这里做一个总结吧. 二 寄 ...

  7. Miracast技术详解(二):RTSP协议

    目录 RTSP概述 抓包准备 WFD能力协商(Capability Negotiation) RTSP M1 Messages RTSP M2 Messages RTSP M3 Messages RT ...

  8. App启动页面优化

    目录介绍 01.存在白屏问题 1.1 问题描述 1.2 问题分析 02.解决白屏的办法 2.1 解决方案分析 2.2 第一种解决方案 2.3 第二种解决方案 2.4 注意要点 03.Applicati ...

  9. openlayers操作分享:如何从容的在vue中食用openlayers6

    这篇文章,分享下我对openlayers的一些经验和理解,会夹杂大量搜索出来得文档,是我正式使用时可以实现的,废话不多说,我们从下载开始 一,openlayers安装且初始化地图 创建vue项目就省略 ...

  10. 记录--从原理分析vue开发环境搭建的全部过程

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 平时大家开发vue项目的时候,相信大部分人都是使用 vue-cli脚手架生成的项目架构,然后 npm run install 安装依赖,n ...