从 Roslyn 代码分析器调用分析程序集的方法

Posted

技术标签:

【中文标题】从 Roslyn 代码分析器调用分析程序集的方法【英文标题】:Invoke method of analyzed assembly from a Roslyn Code Analyzer 【发布时间】:2021-10-28 23:11:49 【问题描述】:

我有一个 C# roslyn 代码分析器,它需要分析给定类的泛型方法调用的使用场景。我正在收集对方法、泛型类型参数等的所有引用,然后想要调用方法(通过反射)来分析输出以报告分析器中的潜在诊断。有没有从 Roslyn-Compilation.Assembly 到 System.Reflection.Assembly 的方法?如果没有,还有其他方法吗?

Analyzer 项目和要分析的解决方案在我的控制之下。

谢谢!

【问题讨论】:

不清楚从一个程序集到另一个程序集的含义是什么。请详细描述您的问题,如果有帮助,请添加代码示例。 即使你能做到这一点,你真的不应该这样做。例如,如果这样的方法包含while (true) 怎么办。这很可能在开发人员键入代码时发生,并且诸如 Visual Studio 之类的 IDE 可能决定在任何时间点运行分析器。此外,代码可能会以各种不良方式崩溃,并导致编译器或您的 IDE 崩溃。 @KrisVandermotten 有效 【参考方案1】:

您不能这样做:当您的分析器正在运行时,我们实际上还没有构建程序集。此外,不能保证您构建的东西可以实际运行。如果我使用 Windows 机器说构建一个只能在 Linux 上运行的项目......那将无法正常工作。

【讨论】:

以上是关于从 Roslyn 代码分析器调用分析程序集的方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Roslyn 代码分析在引用的程序集中查找符号

在 Roslyn 分析器/源生成器中,有啥方法可以区分直接和传递程序集引用

Roslyn - OutOfMemoryException 由于内存中加载的程序集

升级到 Roslyn 分析仪 6.0 版后获取 CA2007

Roslyn:如何将多个项目的编译合并为 1 个单独的编译?

Roslyn:如何修复 RS2008 警告?