刚刚切换到VS2019,我正在研究是否使用代码分析。在项目属性的“代码分析”选项卡中,有许多内置的Microsoft规则集,当我的代码违反其中一个规则时,我可以看到编辑器出现弯曲。我可以自定义这些规则集并“另存为”以创建自己的规则集。
我还看到了代码分析器NuGet软件包,例如“ Roslynator”和“ StyleCop.Analyzers”。这些规则与内置MS规则有什么区别?难道真的只是取决于更全面的规则/更多选择吗?
如果我要坚持使用内置的MS规则,是否有任何限制?例如。他们将继续运行并在TFS / Azure DevOps构建期间得到报告吗?
答案 0 :(得分:2)
传统FxCop和FxCop分析仪之间有什么区别?
旧版FxCop对已编译的程序集进行生成后分析。它作为称为FxCopCmd.exe的单独可执行文件运行。 FxCopCmd.exe加载编译的程序集,运行代码分析,然后报告结果(或诊断)。
FxCop分析器基于.NET编译器平台(“ Roslyn”)。您将它们安装为项目或解决方案引用的NuGet软件包。 FxCop分析器在编译器执行期间运行基于源代码的分析。 FxCop分析器托管在csc.exe或vbc.exe编译器进程中,并在构建项目时运行分析。分析器结果与编译器结果一起报告。
注意
您还可以将FxCop分析器安装为Visual Studio扩展。在这种情况下,分析器将在您在代码编辑器中键入时执行,但它们不会在构建时执行。如果要将FxCop分析器作为持续集成(CI)的一部分运行,请改为将它们作为NuGet软件包安装。
https://docs.microsoft.com/en-us/visualstudio/code-quality/fxcop-analyzers-faq?view=vs-2019
因此,内置的传统FxCop和NuGet分析器仅在构建时运行,而扩展分析器可以在您键入JIT编译器的同时运行。另外,您必须明确地说要在构建上运行遗留代码分析,而NuGet分析器将仅在安装时才在构建上运行。转到菜单选项“运行代码分析”时,安装为NuGet或扩展程序的分析器将无法运行。
至少,这就是我从该页面中得到的。
该页面底部附近有一个链接,可带您了解哪些代码分析规则已移至新分析器,包括现已弃用的规则。
https://docs.microsoft.com/en-us/visualstudio/code-quality/fxcop-rule-port-status?view=vs-2019
不同的分析器尝试覆盖不同的编码样式,而Microsoft在构建FxCop时并未涵盖这些内容。通过我对此所做的很少的研究,有一个完整的兔子洞需要跟踪,爱丽丝,这将花费比我现在更多的时间。而且它似乎充满了许多奥术知识和OCD风格代码,使Wonderland看起来很正常。但这只是我的意见。
关于这些规则和基本Microsoft规则中的各种规则,有很多个人和专业意见,因此有足够的空间来使用您想要的内容并禁用您不需要的内容。对于初学者,我建议一次只打开一些规则。这样一来,您不会被比行代码更多的警告和错误所淹没。好的,这可能有点夸张,但是确实有很多规则确实很棘手,尤其是在遗留代码上,启用它们并不值得,因为您可能没有时间修复它所有。在决定启用什么时,您还将需要进行基础研究并使用“常识”。 (“我真的需要担心15年以上已移植到4种不同语言并具有10k文件的应用程序的可变大小写编码样式的一致性吗?”)这是个人和专业意见,因此请遵循或不遵循。
也不要忘记彼此矛盾的规则。那些很有趣,可以应付。……