代码之家  ›  专栏  ›  技术社区  ›  Dejan Scott Dorman

代码分析的不稳定执行

  •  2
  • Dejan Scott Dorman  · 技术社区  · 7 年前

    我正在尝试进行代码分析。NET标准2.0类库。如上所述 here ,我添加了对的引用 Microsoft.CodeAnalysis.FxCopAnalyzers . 一开始,一切看起来都很好,我开始在构建项目时收到CA*警告。然而,过了一段时间,这些警告消失了,尽管我没有接触代码。

    仅在关闭VS 2017后,删除所有 bin 目录,重新启动VS 2017,我开始返回CA*警告。然而,这似乎不是让他们回来的秘诀:在我的CI环境中,同样的事情也发生了。在一次不相关的提交之后,我丢失了警告,尽管我已经彻底清理了签出目录,但我仍然没有将它们带回来。

    我想知道代码分析有时停止工作的原因是什么。不幸的是,我还没有找到一种方法来重现这一点,因此我提出了这个问题。

    事实上,我很想理解为什么向项目中添加NuGet可以修改编译过程的结果。那魔法是怎么起作用的?欢迎任何指点。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jessehouwing    7 年前

    关于如何从NuGet加载Roslyn分析仪

    新的C#和VB编译器基于Roslyn。Roslyn是一个可扩展的编译器框架,许多分析器可以在编译过程的不同阶段运行。

    MsBuild将通过 analyzers 从项目文件到调用Roslyn编译器的引用,后者将依次加载这些引用,并在对源代码进行解析和解释后执行它们。

    NuGet包具有特殊的元数据,确保这些分析器作为对MsBuild项目文件的特殊类型引用添加,以便MsBuild可以将它们传递给编译器。

    至于为什么分析仪有时会失效

    这很难说。存储了一些项目元数据。设置选项以清除工作区/工作目录并重新启动可能会解决此问题。 Setting the build.clean variable to all should help with that. 删除 bin , obj .vs 文件夹以及 packages 文件夹并执行nuget restore+build应该会使您恢复到可用状态。

    新的FxCop analyzer项目尚未完成,仍在更新中。analyzer基础结构中的错误可能导致分析失败。不幸的是,这通常很难调试。逐一关闭规则可以帮助您找到罪魁祸首。

    There seems to be an option built into Roslyn to enable ETW Logging ,这应该会给您提供更多的详细信息,但这并没有很好的文档记录。

    在Visual Studio中,还有另一件事可以破坏分析器,Visual Studio扩展也可以加载分析器,然后Visual Studio将其注入到构建过程中。这些扩展不是项目的一部分,因此不会以任何方式出现在源代码管理中。因此,任何最近更新的扩展也可能是罪魁祸首。将MsBuild详细级别设置为Diagnostics应显示传递给哪些分析器 csc ,这将帮助您找出问题的根源。