Roslynでプロジェクト間の依存関係を正常に取得しましたが、Visual Studio Enterpriseのコードマップ機能と同様に、クラス間の依存関係を取得したいと考えています。Roslynのクラス間の依存関係を取得する
ここに私のコードは、 "?????"私は何かを得ることができると思っています。私はRoslyn APIについて非常に新しいですが、そこから進める方法はわかりません。
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
});
}
}
'ClassDeclarationSyntax'を使ってすべての使用されている型を取得することを意味しますか? 'SyntaxNode'をすべて取得し、セマンティックモデルを通して対応する' ISymbol'を取得し、シンボルが 'INamedTypeSymbol'かどうかを確認してください。しかし、これは非常に遅いと思う。 – Tamas
@ Tamas-SonarSourceTeam依存関係グラフを生成してPDFに出力する必要があるため、処理が遅い場合は取引遮断器ではありません。しかし、私はあなたが提案する操作をどのように実行するのかまだ分かりません。おそらく答えとしていくつかのコードを投稿できますか?それは私を大いに助け、私はできるだけ早く私の実際のシナリオでテストします。 – heltonbiker