我正在尝试为我的.NET Standard 2.0类库进行代码分析。如上所述here,我添加了对Microsoft.CodeAnalysis.FxCopAnalyzers
的引用。一开始,一切都很好看,我在构建项目时开始收到CA *警告。然而,过了一段时间,虽然我没有触及代码,但这些警告消失了。
仅在关闭VS 2017后,删除所有bin
目录,重启VS 2017,我才开始收回CA *警告。然而,这似乎并不是让他们回归的方法:在我的CI环境中,同样的事情发生了。我在一次不相关的提交后丢失了警告,虽然我已经完全清理了结帐目录,但仍然无法将它们带回来。
我想知道代码分析何时停止工作的原因可能是什么。不幸的是,我还没有找到一种方法来重现这一点 - 因此我的问题。
事实上,我很想知道为什么在项目中添加NuGet可以完全修改编译过程的结果。这魔术是如何运作的?欢迎任何指示。
答案 0 :(得分:1)
新的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分析仪项目仍未完成,仍在更新中。分析器基础结构中的错误可能导致分析失败。不幸的是,这通常很难调试。逐个关闭规则可能会帮助你找到罪魁祸首。
There seems to be an option built into Roslyn to enable ETW Logging,它可以为您提供更多详细信息,但目前还没有详细记录。
在Visual Studio中还有另一件事可以打破分析器,Visual Studio Extensions也可以加载分析器,然后Visual Studio将注入到构建过程中。这些扩展不是您项目的一部分,因此不会以任何方式显示在源代码管理中。因此,任何最近更新的扩展也可能是罪魁祸首。将MsBuild详细级别设置为Diagnostics应该会向您显示传递给csc
的分析器,这可以帮助您找出问题的来源。