当前位置: 首页 > news >正文

推荐 .NET/C# 开发者安装的几款代码分析插件或对应的代码分析 NuGet 包

如果你使用的是旧版本的 Visual Studio,那么默认的代码分析规则集是“最小建议规则集”。基于这个,写出来的代码其实只能说是能跑通过而已。随着 Roslyn 的发布,带来了越来越多更强大的代码分析器,可以为编写高质量的代码带来更多的帮助。

作为 .NET/C# 开发者,强烈建议安装本文推荐的几款代码分析器。


本文内容

    • 推荐
    • 类型
    • 简介
      • Visual Studio 2019 自带的分析器
      • Microsoft Code Analysis
      • Code Cracker
      • Meziantou.Analyzer
    • 配置代码分析严重程度

推荐

  1. Visual Studio 2019 自带的分析器
  2. Microsoft Code Analysis
    • VS 扩展:Microsoft Code Analysis 2019
    • NuGet 包: Microsoft.CodeAnalysis.FxCopAnalyzers
  3. Code Cracker
    • VS 扩展:Code Cracker for C#
    • NuGet 包:codecracker.CSharp
  4. Meziantou.Analyzer
    • VS 扩展:Meziantou.Analyzer
    • NuGet 包:Meziantou.Analyzer 1.0.238

类型

这里的分析器分为 Visual Studio 扩展形式的分析器和 NuGet 包形式的分析器。

Visual Studio 扩展形式的分析器可以让你一次安装对所有项目生效,但缺点是不能影响编译过程,只能作为在 Visual Studio 中编写代码时给出提示。

NuGet 包形式的分析器可以让某个项目中的所有成员享受到同样的代码分析提示(无论是否安装插件),但缺点是仅针对单个项目生效。

简介

Visual Studio 2019 自带的分析器

重构提示

IDE0051

上图生效的分析器就是 Visual Studio 2019 自带的分析器。在可能有问题的代码上,Visual Studio 的代码编辑器会显示一些文字效果来提醒你代码问题。比如这张图就是提示私有成员 Foo 未使用。

Visual Studio 2019 自带的分析器的诊断 ID 都是以 IDE 开头,因此你可以通过这个前缀来区分是否是 Visual Studio 2019 自带的分析器提示的。

另外,自带的分析器可谓非常强大,除了以上这种提示之外,还可以提示一些重复代码的修改。比如你修改了某段代码,它会提示你相似的代码也可能需要修改。

Microsoft Code Analysis

Microsoft Code Analysis 分为两种用法,一个是 Visual Studio 扩展的形式,你可以去这里下载安装或者去 Visual Studio 的扩展管理界面搜索安装;另一个是 NuGet 包的形式,你可以直接在项目的 NuGet 管理界面安装 Microsoft.CodeAnalysis.FxCopAnalyzers。

这款分析器也是微软主推的代码分析器,可以分析 API 设计问题、全球化与本地化问题、稳定性问题、性能问题、安全性问题、代码使用问题等非常多的种类。

比如下图是稳定性的一个问题,直接 catch 了一个 Exception 基类:

catch

配置提示

虽然你可以通过配置规则严重性来消除提示,但是这样写通常代码也比较容易出现一些诡异的问题而难以定位。

Microsoft Code Analysis 分析器的诊断 ID 都是以 CA 开头,因此你可以通过这个前缀来区分是否是 Microsoft Code Analysis 分析器提示的。

Microsoft.CodeAnalysis.FxCopAnalyzers 的 NuGet 包实际上是一组分析器的合集,包括:

  • Microsoft.CodeAnalysis.FxCopAnalyzers
    • 主分析器,分析各种代码问题
  • Microsoft.CodeQuality.Analyzers
    • 专门分析代码质量的分析器(比如没有使用某个参数)
  • Microsoft.NetCore.Analyzers
    • 如果你在使用 .NET Core 或者 .NET Standard,那么此分析器会告诉你更恰当地使用框架提供的 API(如果 API 恰好与 .NET Framework 桌面应用相同,那么 .NET Framework 桌面应用也因此受益)
  • Microsoft.NetFramework.Analyzers
    • 如果你在使用 .NET Framework 开发桌面应用,那么此分析器会告诉你更恰当地使用框架提供的 API

如果你想安装这款 NuGet 包,并不需要特别去 NuGet 包管理器中安装,也不需要命令行,只需要去项目的属性页面,选择“安装”就好了。如下图:

安装分析器

Code Cracker

Code Cracker 是第三方开发者开发的,代码已在 GitHub 上开源:

  • code-cracker/code-cracker: An analyzer library for C# and VB that uses Roslyn to produce refactorings, code analysis, and other niceties.

由于这款分析器的出现比 Visual Studio 2019 早很多,所以待 Visual Studio 2019 出现的时候,他们已经出现了一些规则的重复(意味着你可能同一个问题会被 Visual Studio 报一次,又被 Code Cracker 报一次)。

虽然部分重复,但 Code Cracker 依然提供了很多 Visual Studio 2019 和 Microsoft Code Analysis 都没有带的代码质量提示。

比如,如果你代码中的文档注释缺少了某个参数的注释,那么它会给出提示:

CC0097

Code Cracker 支持的所有种类的代码分析都可以在这里查得到:

  • All diagnostics - Code Cracker

Meziantou.Analyzer

这款插件是对其他几款分析器的重要补充。如果说其他几款分析器可以帮你解决一些基本设计问题或者 Bug 的话,这款分析器可以帮你发现更大范围的问题。

最典型的,也是我推荐这款分析器的最大原因是 —— 区域和本地化!

你的每一个 ToString(),每一个字符串比较,每一个字典的构造……他都提醒你需要考虑区域问题,然后提供给你区域问题的推荐代码!

提醒需要考虑区域问题

提供的建议

配置代码分析严重程度

你的项目中对于某项规则严重性的看法也许跟微软或其他第三方分析器不一样,因此你需要自己配置规则集的严重性。

关于如何配置代码分析严重程度,你可以阅读:

  • 使用 .editorconfig 配置 .NET/C# 项目的规则严重性 - walterlv

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 在 HTML 超链接上添加可交互的 ToolTip
  • 在移动端打开 Google 的网页快照
  • 为自己搭建的博客添加可切换的暗色和亮色主题
  • 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task)
  • 让你编写的控件库在 XAML 中有一个统一的漂亮的命名空间(xmlns)和命名空间前缀
  • Sdk 风格的 csproj 对 WPF/UWP 支持不太好?有第三方 SDK 可以用!MSBuild.Sdk.Extras
  • 为博客或个人站点的 Markdown 添加 LaTeX 公式支持
  • 如何让 .NET Core 命令行程序接受密码的输入而不显示密码明文
  • 如何编写 WPF 的标记扩展 MarkupExtension,即便在 ControlTemplate/DataTemplate 中也能生效
  • PasswordVault —— 在 UWP 应用中安全地保存密码
  • 如何在 MSBuild Target(Exec)中报告编译错误和编译警告
  • 将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样
  • 使用 LINQ to XML,.NET 让生成 XML 文件变得和直接写 XML 一样轻松
  • git subtree 不断增加的推送时间,解不玩的冲突!这篇文章应该能救你
  • 阻止某个 NuGet 包意外升级
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • centos安装java运行环境jdk+tomcat
  • docker-consul
  • EventListener原理
  • JavaWeb(学习笔记二)
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • mysql_config not found
  • PAT A1017 优先队列
  • Python进阶细节
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 代理模式
  • 第2章 网络文档
  • 前端面试题总结
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一个项目push到多个远程Git仓库
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​决定德拉瓦州地区版图的关键历史事件
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #include
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (20050108)又读《平凡的世界》
  • (4) PIVOT 和 UPIVOT 的使用
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (ZT)出版业改革:该死的死,该生的生
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)JAVA使用POI操作excel
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (全注解开发)学习Spring-MVC的第三天
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)图像的%2线性拉伸
  • (转) Android中ViewStub组件使用
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 获取一个正在运行的进程的命令行参数