gpt4 book ai didi

c# - 代码分析的不稳定执行

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:27 25 4
gpt4 key购买 nike

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

仅在关闭 VS 2017、删除所有 bin 目录、重新启动 VS 2017 后,我才开始恢复 CA* 警告。然而,这似乎并不是让他们回来的秘诀:在我的 CI 环境中,同样的事情发生了。我在一次不相关的提交后丢失了警告,尽管我已经完全清理了结帐目录,但我仍然无法将它们恢复。

我想知道代码分析有时会停止工作的原因是什么。不幸的是,我还没有想出重现这个的方法 - 因此我的问题。

事实上,我很想了解为什么将 NuGet 添加到项目中完全可以修改编译过程的结果。这个魔法是如何运作的?欢迎任何指点。

最佳答案

关于如何从 NuGet 加载 Roslyn Analyzer

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

MsBuild 会将项目文件中的 analyzers 引用传递给对 Roslyn 编译器的调用,Roslyn 编译器将依次加载这些文件,并在源代码被解析和解释后执行它们。

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

为什么分析器有时会失败

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

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

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

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

关于c# - 代码分析的不稳定执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com