2017-06-01 58 views
2

我试图找回在罗斯林一类语法节点的类型,所以我可以用@slaks沿着以下获得封闭命名空间检索类型信息回答:Roslyn : How to get the Namespace of a DeclarationSyntax with Roslyn C#无法通过罗斯林

我有以下几点:

static async Task MainAsync(string[] args) 
{ 
    string projectPath = @"C:\Projects\ertp\Ertp.Mobile.csproj"; 
    var msWorkspace = MSBuildWorkspace.Create(); 

    var project = msWorkspace.OpenProjectAsync(projectPath).Result; 

    foreach (var document in project.Documents) 
    { 
     Console.WriteLine(project.Name + "\t\t\t" + document.Name); 
     SemanticModel model = await document.GetSemanticModelAsync(); 
     var classes = document.GetSyntaxRootAsync().Result.DescendantNodes().OfType<ClassDeclarationSyntax>(); 
     foreach (var klass in classes) 
     { 
      var info = model.GetTypeInfo(klass); 
      var isNull = info.Type == null; //TRUE 
     } 
    } 

如果我不能获得类型我不能命名空间 - 任何想法如何检索我需要的细节?

回答

1

对于减速器,您需要先拨打model.GetDeclaredSymbol(node),然后再拨打名称空间ContainingNamespace

model.GetTypeInfo(node).Type将用于表达式节点。