有没有办法在 Roslyn 中访问降低的 C# AST
Is there a way to access the lowered C# AST in Roslyn
我正在写一个 tool,给定一段(可编译的)C# 代码,生成另一个源,使用 Mono.Cecil
,输出一个 等价的程序集 到通过编译原始代码生成的代码。这是通过解析 C# 代码并访问生成的 AST 并生成对等效 Mono.Cecil
API 的调用来实现的(我想这有点类似于 Roslyn 的代码生成部分所做的,但生成对 Mono.Cecil
而不是 IL
).
鉴于此,处理给定 AST 的降低版本 将使代码更易于实现、更健壮等,但查看 Roslyn 源代码看起来并不像一种访问它的方法。
在最好的情况下,我的代码需要调入负责降低 https://github.com/dotnet/roslyn/blob/main/src/Compilers/CSharp/Portable/Lowering 的各种类型,AFAICS 都是内部的。
从哪里来的问题:是否真的不可能获得给定 AST 的 降低版本?
我们拥有的最近的有点“降低”的是我们的 IOperation APIs,它比 syntax/semantic APIs 低一点。我们没有 API 来为您提供完全降低的表示。