gpt4 book ai didi

c# - Roslyn 获取类的依赖项

转载 作者:行者123 更新时间:2023-11-30 12:57:51 25 4
gpt4 key购买 nike

我正在尝试为一个类确定它引用的内容(其他 namespace 或外部库 namespace )。对于给定的文档/语法树等,似乎开箱即用,没有办法做到这一点......而且我需要的更多只是使用符号查找器,遍历整个代码库中的每个文件,然后调用查找,粘贴找到的引用在 map 中,然后向后导航 map 。

我错了吗?我错过了一些简单的东西吗?我只是想建立一个依赖关系图......如果我从这个类开始,那么这就是递归最终需要的一切。我不介意做研究,但我觉得我遗漏了一些东西……任何线索都会有所帮助

简要伪代码概念:

var msWorkspace = MSBuildWorkspace.Create();
var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;
foreach (var project in solution.Projects)
{
Append(project.Name);
foreach (var document in project.Documents)
{
Append("\t\t\t" + document.Name);
if (document.SupportsSemanticModel)
{
SemanticModel model = await document.GetSemanticModelAsync();
var node = await document.GetSyntaxRootAsync();
//Need to be able to gather dependencies for this current doc
}
}
}

最佳答案

您可以使用语义模型相当轻松地做到这一点:

node.Descendents()
.SelectMany(n => semanticModel.GetSymbols(n, workspace, true, new CancellationToken())
.Distinct()

关于c# - Roslyn 获取类的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32676631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com