Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Roslyn解析了没有工作区的语法树_C#_Roslyn - Fatal编程技术网

C# Roslyn解析了没有工作区的语法树

C# Roslyn解析了没有工作区的语法树,c#,roslyn,C#,Roslyn,我正在尝试使用Roslyn创建一个C代码编辑器。我想得到一个解析的语法树,以便添加代码完成支持 但是,我不能使用工作区,因为它们在iOS上被破坏 因此,我试图直接使用编译来命中C#编译器(是这样吗?)。API非常简单,但我不知道如何获取类型的成员信息 具体地说,我希望看到C类的Members属性,其中包含对完全声明的D类的引用 但是,INamedTypeSymbol没有附加任何有用的信息 如何从CSharp编译中获取丰富的类型信息 var cst = Microsoft.CodeAnalysis

我正在尝试使用Roslyn创建一个C代码编辑器。我想得到一个解析的语法树,以便添加代码完成支持


但是,我不能使用工作区,因为它们在iOS上被破坏

因此,我试图直接使用编译来命中C#编译器(是这样吗?)。API非常简单,但我不知道如何获取类型的成员信息

具体地说,我希望看到C类的Members属性,其中包含对完全声明的D类的引用

但是,
INamedTypeSymbol
没有附加任何有用的信息

如何从CSharp编译中获取丰富的类型信息

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);

您正在查找,它返回类型中所有声明的成员。

“但是,我无法使用工作区,因为它们在iOS上已断开。”--断开的是什么?由于MSBuild尚不可移植,因此无法使用MSBuildWorkspace,但核心位应该可以正常工作。我们会认为任何“破碎”都是一个错误。