没有工作区的 Roslyn 解析语法树
Roslyn Resolved Syntax Tree without Workspaces
我正在尝试使用 Roslyn 创建 C# 代码编辑器。我想要一个已解析的语法树,以便我可以添加代码完成支持。
但是,我无法使用工作区,因为它们在 iOS 上损坏了。
因此,我尝试使用编译直接访问 C# 编译器(对吗?)。 API 很简单,但我不知道如何获取类型的成员信息。
具体来说,我希望看到 class C 的成员 属性,其中包含对完全声明的 D class.
的引用
但是,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()
method,其中 returns 类型中的所有已声明成员。
我正在尝试使用 Roslyn 创建 C# 代码编辑器。我想要一个已解析的语法树,以便我可以添加代码完成支持。
但是,我无法使用工作区,因为它们在 iOS 上损坏了。
因此,我尝试使用编译直接访问 C# 编译器(对吗?)。 API 很简单,但我不知道如何获取类型的成员信息。
具体来说,我希望看到 class C 的成员 属性,其中包含对完全声明的 D class.
的引用但是,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()
method,其中 returns 类型中的所有已声明成员。