我已经成功地使用Roslyn获得了项目之间的依赖关系,现在我想获得类之间的依赖关系,类似于Visual Studio Enterprise中的代码映射功能。
这是我的代码,“?????”我想我可以得到一些东西的地方。不过,我对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
});
}
}
最佳答案
我不确定您的要求,但是您可能可以检查该类的所有后代SyntaxNode
并获取相应的符号及其类型,然后收集这些类型。类似于以下内容:
var semantic = compilation.GetSemanticModel(syntree);
var typesForCurrentClass = classNode.DescendantNodes().Select(n =>
semantic.GetTypeInfo(n).Type);
请注意,由于存在部分类,因此给定类符号可以有多个
typesForCurrentClass
。关于c# - 在Roslyn中获取类之间的依赖关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39235100/