我正在尝试使用Roslyn创建一个C#代码编辑器。我想获得一个已解析的语法树,以便我可以添加代码完成支持。
但是,我不能使用Workspaces,因为它们在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);