原因

最近要开展新项目,由于是新项目,公司之前没制定规范,以及强制规定使用代码整理工具,领导要我看看代码规范,以及选一个代码整理工具,给了一个叫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. 基于图数据库 NebulaGraph 实现的欺诈检测方案及代码示例

    本文是一个基于 NebulaGraph 图算法.图数据库.机器学习.GNN 的 Fraud Detection 方法综述.在阅读本文了解欺诈检测的基本实现方法之余,也可以在我给大家准备的 Playgr ...

  2. 一文读懂图数据库 Nebula Graph 访问控制实现原理

    摘要:数据库权限管理对大家都很熟悉,然而怎么做好数据库权限管理呢?在本文中将详细介绍 Nebula Graph 的用户管理和权限管理. 本文首发 Nebula Graph 博客:https://neb ...

  3. Task Manager 的设计简述

    讲解 Task Manager 之前,在这里先介绍一些 Task Manager 会使用到的概念术语. 图数据库 Nebula Graph 中,存在一些长期在后台运行的任务,我们称之为 Job.存储层 ...

  4. WebView无法加载页面报错 net:ERR_CLEARTEXT_NOT_PERMITTED 还有webView加载网页后出现ERR_UNKNOWN_URL_SCHEME

    根据网络安全配置- 从Android 9(API级别28)开始,默认情况下禁用明文支持.因此http的url均无法在webview中加载 还可以看看-https: //koz.io/android-m ...

  5. slice 切片数组测试记录【GO 基础】

    〇.测试前准备 本文是在 GO 环境下测试记录系列之一,GO 基本环境部署步骤将略过,直接上代码. 下面是常用命令:[初始化 + 运行 + 编译] // {GOPATH} 环境变量值, example ...

  6. springl课程整理,图片文档

    学习spring第一步,导入坐标 注入案例 还能给bean取一个或多个别名.格式如下name = "xxx,ooo" 工厂方法也能不用new 造方法 工厂类方法用下面方法 如果不用 ...

  7. 3D模型+BI分析,打造全新的交互式3D可视化大屏开发方案

    背景介绍 在数字经济建设和数字化转型的浪潮中,数据可视化大屏已成为各行各业的必备工具.然而,传统的数据大屏往往以图表和指标为主,无法真实地反映复杂的物理世界和数据关系.为了解决这个问题,3D模型可视化 ...

  8. 摆脱鼠标系列 - vscode - 跳转到下一个文件 Ctrl(右边) + PageDown 这个很常用

    为什么 摆脱鼠标系列 - vscode - 跳转到下一个文件 Ctrl(右边) + PageDown 这个很常用 右边Ctrl 就可以单手操控了 这个频率很高

  9. Centos安装常见软件

    一.vscode sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e &qu ...

  10. MediaCodec硬解流程

    一 MediaCodec概述 MediaCodec是Android 4.1(api 16)版本引入的低层编解码接口,同时支持音视频的编码和解码.通常与MediaExtractor.MediaMuxer ...