原文:Mika Dumont
翻译:汪宇杰
Roslyn 是 .NET 编译器平台,即使在运行代码之前,它也能帮助您捕获 Bug。例如内置于 Visual Studio 中的Roslyn 拼写检查分析器。
假设您正在创建一个静态方法,并将 static 单词拼错为 statc。在运行代码之前,您将能够看到此拼写错误。因为 Roslyn 可以在键入代码时生成警告,甚至在您完成行之前。换句话说,您不必编译代码之后才发现您犯了一个错误。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/778dde643309dd0bea3d54948ed54a07.png)
Roslyn 分析仪还可以通过 Visual Studio 灯泡图标显示自动代码修复,从而允许您立即修复代码。
![640?wx_fmt=gif](https://img-blog.csdnimg.cn/img_convert/063ad383ea7f9a2d0f5d0549953aa4cb.gif)
但是,如果你能捕捉到更多的错误呢?
让我向您介绍 Roslyn 分析器包。这些分析器集合提供了更详细的分析,但随 Visual Studio 默认工具发布。要了解有关我们最喜欢的 Roslyn 分析仪的详细信息,请访问我们的 Roslyn 分析器 GitHub 仓库。此仓库包括仍然适用于现代软件开发的 FxCop,但现在以基于 Roslyn 的现代代码分析平台为目标。让我们继续,安装这个包,以提高工作效率,更快地编写更好的代码!
译者注:Roslyn 分析器 https://github.com/dotnet/roslyn-analyzers
将 FxCop 分析器作为 NuGet 包安装
假设您使用的是 Visual Studio 2017 15.8 或更高版本,请选择最新版本的 Microsoft.CodeAnalysis.FxCopAnalyzers。
使用包管理器 UI 在 Visual Studio 中安装包。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/7eb0daea6438fb017790ca506a5632c8.png)
安装包后,只需从解决方案资源管理器自定义分析器诊断。分析器节点将显示在解决方案资源管理器中的"引用"或"依赖项"节点下。如果展开分析器,然后展开其中一个分析器程序集,则可以在程序集中看到所有诊断。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/3626e6f0408ea225b52d70b2276888cd.png)
您可以在属性窗口中查看诊断的属性,包括其描述和默认严重性。要查看属性,请右键单击规则并选择"属性",或选择规则后按 Alt+Enter。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/1f72d97ea96181f8ea007db752df8a3f.png)
解决方案资源管理器中每个诊断项旁边的图标对应于您在编辑器中打开规则集时看到的图标:
圆圈中的"i"表示信息
三角形中的"!" 表示警告
圆圈中的"x"表示严重
浅色背景上圆圈中的"i"表示隐藏的严重
圆圈中的"*"表示忽略的诊断
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/063a3ed12e5bc56e9572f621a5cc561d.png)
然后,可以从解决方案资源管理器设置规则集严重性。在解决方案资源管理器中,展开依赖项和分析器。展开包含要为其设置严重性的规则的程序集。右键单击规则并选择"设置规则集严重性",并在弹出的菜单中选择一个严重性选项。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/5fb1f3bb406482d46ee3f601b902e2a7.png)
如果将规则严重性设置为警告,则会在代码中收到该特定规则集的警告。
![640?wx_fmt=png](https://img-blog.csdnimg.cn/img_convert/17a92c43db895f0380f7bf79759ca04f.png)
现在,您已经了解了分析器的工作原理,您可以提高工作效率,更快地编写更好的代码!
![640?wx_fmt=gif](https://img-blog.csdnimg.cn/img_convert/d95862a284d3f365a1c0ae511826cba1.gif)
问:此警告显示在 Visual Studio 中:"运行代码分析已弃用为 FxCop 分析器,该分析器在生成期间运行。请参阅https://aka.ms/fxcopanalyzers迁移到 FxCop 分析仪"。这是什么意思?
答:FxCop 是比 Roslyn 早近十年的代码分析引擎。就像我们推进编译器(例如介绍 Roslyn)一样,我们也在将代码分析技术推进到 Roslyn 平台。由于它由 .NET 编译器平台提供支持,因此在键入代码时,它可以在代码中生成警告。换句话说,您不必并编译代码才能发现您犯了一个错误。
问:FxCop分析仪和旧版FxCop分析器有什么区别?
答:FxCop 分析器在编译过程中实时分析源代码,而旧版 FxCop 是静态代码分析,并在生成完成后分析二进制文件。有关详细信息,请参阅 Roslyn 分析器与静态代码分析(1)和 FxCop 分析器常见问题解答(2)。
问:我可以编写自定义分析器吗?
答:当然可以!有关如何编写分析器的文档,请参阅此处(3)。
问:我应该使用 Roslyn 分析器还是 .editorconfig 规范代码样式?
答:Roslyn 分析器和 .editorconfig 文件是齐头并进的。在 .editorconfig 文件或文本编辑器选项页上定义代码样式时,实际上正在配置内置于 Visual Studio 中的 Roslyn 分析器。
问:分析器在持续集成 (CI) 生成中工作吗?
答:是的,分析器作为NuGet包可以 CI 中约束编译。
问:在哪里可以请求更多分析器或报告错误?
答:您可以在 GitHub 上的 Roslyn 仓库上请求更多分析器并报告 Bug。
译者注:
(1)https://docs.microsoft.com/visualstudio/code-quality/roslyn-analyzers-overview?view=vs-2019#roslyn-analyzers-vs-static-code-analysis
(2) https://docs.microsoft.com/visualstudio/code-quality/fxcop-analyzers-faq?view=vs-2019
(3)https://docs.microsoft.com/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix
(4)https://github.com/dotnet/roslyn/issues
![640?wx_fmt=gif](https://img-blog.csdnimg.cn/img_convert/dc590e415d10ed3357652d26dba832a9.gif)
英文原文可点击“阅读原文”查看