[英]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.