Я пытаюсь использовать Roslyn для создания редактора кода C#. Я хотел бы получить разрешенное синтаксическое дерево, чтобы я мог добавить поддержку завершения кода.

Но я не могу использовать рабочие пространства, поскольку они не работают на iOS.

Поэтому я пытаюсь обратиться к компилятору C# напрямую, используя Compilations (правильно ли это?). API достаточно прост, но я не могу понять, как получить информацию о членах для типов.

В частности, я хотел бы видеть свойство Members класса C, которое включает ссылку на полностью объявленный класс 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);

Frank Krueger

Ответов: 1

Ответы (1)

Вы ищете GetMembers() метод, который возвращает все объявленные члены в типе.

2022 WebDevInsider