簡體   English   中英

沒有工作區的Roslyn解析語法樹

[英]Roslyn Resolved Syntax Tree without Workspaces

我正在嘗試使用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()方法 ,該方法返回該類型中所有已聲明的成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM