簡體   English   中英

Roslyn:如何使用Roslyn C獲取DeclarationSyntax的命名空間#

[英]Roslyn : How to get the Namespace of a DeclarationSyntax with Roslyn C#

我有一個包含一些類文件的ac#解決方案。 通過Roslyn,我能夠解析解決方案以獲得解決方案中的項目列表。 從那里,我可以在每個項目中獲取文檔。 然后,我可以獲得每個ClassDeclarationSyntax的列表。 這是起點。

        foreach (var v in _solution.Projects)
        {
            //Console.WriteLine(v.Name.ToString());
            foreach (var document in v.Documents)
            {
                SemanticModel model = document.GetSemanticModelAsync().Result;
                var classes = document.GetSyntaxRootAsync().Result.DescendantNodes().OfType<ClassDeclarationSyntax>();
                foreach(var cl in classes)
                {
// Starting around this point...
                    ClassDiagramClass cls = new ClassDiagramClass(cl, model);
                    diagramClasses.Add(cls);
                }
            }
        }

從這些對象我希望能夠獲得每個類中使用的變量的命名空間。 參見文件1有一個方法“getBar()”,它返回一個B.Bar類型的對象。 命名空間很重要,因為它告訴您實際返回的是哪種類型的Bar。

File1.cs

using B;
namespace A {
    public class foo(){
        public Bar getBar(){ return new Bar();}
    }
}

File2.cs

namespace B {
    public class Bar(){
    }
}

File3.cs

namespace C {
    public class Bar(){
    }
}

問題是我不知道如何從代碼中的位置獲取Namespace值。 有任何想法嗎?

命名空間是語義信息,因此您需要從語義模型中獲取它:

model.GetTypeInfo(cl).Type.ContainingNamespace

暫無
暫無

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

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