内置代码分析器与 NuGet 包

And*_*ens 5 stylecop static-code-analysis roslyn-code-analysis roslynator visual-studio-2019

刚刚切换到VS2019我\xe2\x80\x99m探索是否使用代码分析。在项目属性\xe2\x80\x9c代码分析\xe2\x80\x9d选项卡中,有许多内置的Microsoft规则集,当我的代码违反这些规则之一时,我可以看到编辑器出现波形曲线。我可以自定义这些规则集并将 \xe2\x80\x9csave 为 \xe2\x80\x9d 来创建我自己的规则集。

\n\n

我还看到了代码分析器 NuGet 包,例如 \xe2\x80\x9cRoslynator\xe2\x80\x9d 和 \xe2\x80\x9cStyleCop.Analyzers\xe2\x80\x9d。这些和内置的 MS 规则有什么区别?真的只是因为更全面的规则/更多的选择吗?

\n\n

如果我想坚持使用内置的 MS 规则,有什么限制吗?例如,它们是否仍会在 TFS/Azure DevOps 构建期间运行并被报告?

\n

com*_*guy 3

传统 FxCop 和 FxCop 分析器有什么区别?

旧版 FxCop 对已编译的程序集运行构建后分析。它作为名为 FxCopCmd.exe 的单独可执行文件运行。FxCopCmd.exe 加载已编译的程序集,运行代码分析,然后报告结果(或诊断信息)。

FxCop 分析器基于 .NET 编译器平台(“Roslyn”)。您将它们安装为项目或解决方案引用的 NuGet 包。FxCop 分析器在编译器执行期间运行基于源代码的分析。FxCop 分析器托管在编译器进程(csc.exe 或 vbc.exe)内,并在项目构建时运行分析。分析器结果与编译器结果一起报告。

笔记

您还可以将 FxCop 分析器安装为 Visual Studio 扩展。在这种情况下,分析器会在您在代码编辑器中键入时执行,但它们不会在构建时执行。如果您希望将 FxCop 分析器作为持续集成 (CI) 的一部分运行,请将它们安装为 NuGet 包。

https://learn.microsoft.com/en-us/visualstudio/code-quality/fxcop-analyzers-faq?view=vs-2019

因此,内置的旧版 FxCop 和 NuGet 分析器仅在构建时运行,而扩展分析器可以在 JIT 编译器在您键入时同时运行。另外,您必须特别指定在构建时运行遗留代码分析,而 NuGet 分析器将在构建时运行,因为它们已安装。当您进入菜单选项“运行代码分析”时,作为 NuGet 或扩展安装的分析器将不会运行。

至少,这就是我从该页面中得到的信息。

该页面底部附近有一个链接,可让您了解哪些代码分析规则已移至新分析器,包括现已弃用的规则。

https://learn.microsoft.com/en-us/visualstudio/code-quality/fxcop-rule-port-status?view=vs-2019

不同的分析器试图涵盖不同的编码风格以及 Microsoft 在构建 FxCop 时未涵盖的内容。爱丽丝,根据我刚刚对此所做的一点研究,有一个完整的兔子洞需要遵循,这将花费比我现在更多的时间来投入其中。它似乎充满了许多神秘的知识和强迫症风格的代码挑剔,使仙境看起来很正常。但那只是我的个人意见。

这些规则和基本的 Microsoft 规则中有很多关于各种规则的个人和专业意见,因此有足够的空间来使用您想要的内容并禁用您不需要的内容。对于初学者,我建议一次只打开几个规则。这样,您就不会被比您可能拥有的代码行更多的警告和错误淹没。好吧,这可能有点夸张,但是有很多规则确实很挑剔,尤其是在遗留代码上,它们并不值得启用,因为您可能没有时间修复它全部。当您决定启用什么时,您还需要进行基础研究并使用“常识”。(“我真的需要担心一个应用程序的可变大写编码风格的一致性吗?这个应用程序已经被移植到 4 种不同的语言超过 15 年并且拥有 10k 个文件?”)这既是个人的也是专业的观点,所以无论是否遵循它。

并且不要忘记相互矛盾的规则。处理这些很有趣......

  • @AndrewStephens我知道这个对话已经很老了,但正如答案中的文档链接中提到的,nuget包路径的错误优势是分析器在构建时运行,因此可以集成到CI管道中。对于 VSIX,这不太可行。它还使得团队中的各个开发人员不必知道要安装哪些扩展,这一切都由 nuget 包恢复来处理。 (2认同)