原因

最近要开展新项目,由于是新项目,公司之前没制定规范,以及强制规定使用代码整理工具,领导要我看看代码规范,以及选一个代码整理工具,给了一个叫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. 小程序开发:接入腾讯云的人像动漫化api接口

    接口如下: 图片的传参方式有两种,一种是传图片的base64,一种是图片url: 我打算免费版使用base64,如果付费用户支持永久存储历史的图片记录(图片存储到腾讯云对象存储中). 前端框架我用的u ...

  2. 开源短信项目 platform-sms 发布了新版本 0.5.0

    Github : https://github.com/makemyownlife/platform-sms 短信服务 platform-sms 0.5.0 发布 ,新的版本做了非常多的优化和改进. ...

  3. 从华为WeAutomate数字机器人论坛,看政企领域的“政务新智理”

    从华为WeAutomate数字机器人论坛,看政企领域的"政务新智理" 从政务治理到"政务新智理",华为WeAutomate在政务领域的思考与实践 华为WeAut ...

  4. java基础之字符串转日期

    package com.iamzken.utils; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  5. 安装centos系统必做操作

    关闭SELinux sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config 在Linux系统中临时关闭SELinux(Security-E ...

  6. 专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间

    自古以来,人们对理想世界的探索从未停止,而最近元宇宙的热潮加速了这一步伐,带来了许多新的应用.作为元宇宙的关键入口,虚拟现实(VR)将成为连接虚拟和现实的桥梁.苹果发布的VISION PRO头戴设备将 ...

  7. FreeRTOS教程7 事件组

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  8. Python爬虫实战系列4:天眼查公司工商信息采集

    Python爬虫实战系列1:博客园cnblogs热门新闻采集 Python爬虫实战系列2:虎嗅网24小时热门新闻采集 Python爬虫实战系列3:今日BBNews编程新闻采集 Python爬虫实战系列 ...

  9. 记录--使用Canvas绘制一个验证码组件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用Canvas绘制一个验证码组件 前言 验证码,这一日常伴随我们的要素,是我们在线交互的重要安全保障.你的手机短信里是否被它占据半壁江山 ...

  10. 记录--基于Vue2.0实现后台系统权限控制

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 基于Vue.js 2.x系列 + Element UI 的后台系统权限控制 前言:关于vue权限路由的那些事儿-- 项目背景:现有一个后台 ...