从 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 - OutOfMemoryException 由于内存中加载的程序集
升级到 Roslyn 分析仪 6.0 版后获取 CA2007