Mam rozwiązanie C#, które zawiera niektóre pliki klas. Dzięki Roslyn mogę przeanalizować rozwiązanie, aby uzyskać listę projektów w ramach rozwiązania. Stamtąd mogę uzyskać dokumenty w każdym projekcie. Następnie mogę uzyskać listę wszystkich ClassDeclarationSyntax. To jest punkt wyjścia.Roslyn: Jak uzyskać Przestrzeń Nazw DeklaracjiSyntax z Roslyn C#
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);
}
}
}
Z tych obiektów, które chcę, aby być w stanie uzyskać przestrzeń nazw zmiennych wykorzystywanych w każdej klasie. Zobacz plik 1 zawiera metodę "getBar()", która zwraca obiekt typu B.Bar. Przestrzeń nazw jest ważna, ponieważ informuje o tym, jaki rodzaj paska rzeczywiście jest zwracany.
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(){
}
}
Kwestia jest taka, że nie jestem pewien h ow, aby dostać się do wartości Namespace, skąd jestem teraz w kodzie. Jakieś pomysły?
powinny być 'await'ing tych połączeń. – SLaks
Uważaj na typy zagnieżdżone. – SLaks