Ich erhalte erfolgreich Abhängigkeiten zwischen Projekten mit Roslyn, und jetzt möchte ich Abhängigkeiten zwischen Klassen, ähnlich der Code-Map-Funktion in Visual Studio Enterprise.Abhängigkeiten zwischen Klassen in Roslyn erhalten
Hier ist mein Code, der "?????" Teil ist, wo ich mir vorstelle, ich könnte etwas bekommen. Ich bin jedoch sehr neu in der Roslyn-API, und ich weiß nicht, wie ich von da an weitermachen soll.
Solution solution = MSBuildWorkspace.Create()
.OpenSolutionAsync(Path.Combine(repoRootFolder, "MySolution.sln"))
.Result;
ProjectDependencyGraph projdeps = solution.GetProjectDependencyGraph();
Digraph graph = new Digraph();
foreach (ProjectId projectId in projdeps.GetTopologicallySortedProjects())
{
string projName = solution.GetProject(projectId).Name;
var projDeps = projdeps.GetProjectsThatThisProjectDirectlyDependsOn(projectId);
foreach (ProjectId depId in projDeps)
{
Project dep = solution.GetProject(depId);
Compilation compilation = dep.GetCompilationAsync().Result;
foreach (var syntree in compilation.SyntaxTrees)
{
foreach (var classNode in syntree.GetRoot().DescendantNodes().OfType<ClassDeclarationSyntax>())
{
var classesThisClassNodeReferences = ?????????
}
}
string depName = dep.Name;
graph.Dependencies.Add(new Dependency
{
Source = projName,
Target = depName
});
}
}
Meinst du, alle verwendeten Typen mit dieser 'ClassDeclarationSyntax' zu bekommen? Sie können alle 'SyntaxNode's bekommen, das entsprechende' ISymbol' durch das semantische Modell erhalten, überprüfen ob das Symbol ein 'INamedTypeSymbol' ist oder nicht. Aber ich denke, das wird extrem langsam sein. – Tamas
@ Tamas-SonarSourceTeam Ich muss Abhängigkeitsgraphen erstellen und sie in PDF ausgeben, wenn es langsam ist, ist es kein Deal Breaker. Aber ich konnte immer noch nicht herausfinden, wie ich die Operation durchführen sollte, die Sie vorschlagen. Könnten Sie vielleicht einen Code als Antwort posten? Es würde mir sehr helfen und ich würde so schnell wie möglich in meinem tatsächlichen Szenario testen. – heltonbiker