Roslyn解析了不带工作区的语法树
本文关键字:工作区 语法树 Roslyn | 更新日期: 2023-09-27 18:28:36
我正在尝试使用Roslyn创建一个C#代码编辑器。我想得到一个解析的语法树,这样我就可以添加代码完成支持。
但是,我不能使用工作区,因为它们在iOS上已损坏。
因此,我试图使用Compilations直接访问C#编译器(这是对的吗?)。API很简单,但我不知道如何获取类型的成员信息。
具体来说,我希望看到类C的Members属性,该属性包含对完全声明的D类的引用。
但是,INamedTypeSymbol
没有任何有用的信息
如何从CSharpCompilation中获取丰富的类型信息?
var cst = Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseCompilationUnit (
"public class C { public D foo; }");
var dst = Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseCompilationUnit (
"public class D { public C bar; }");
var comp = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.
Create ("Poo").
AddSyntaxTrees (cst.SyntaxTree).
AddSyntaxTrees (dst.SyntaxTree);
var classC = comp.GetSymbolsWithName (n => n == "C").FirstOrDefault (); //= C
var classD = comp.GetSymbolsWithName (n => n == "D").FirstOrDefault (); //= D
var otherClassC = comp.GetTypeByMetadataName ("C"); //= C
Console.WriteLine ("C = " + classC);
您正在寻找GetMembers()
方法,它返回类型中所有声明的成员。