找不到我需要的所有符号,如何使用 Roslyn 查找更多符号 API

Not finding all of the symbols I need,How to find more symbols using the Roslyn API

我正在使用 roslyn API 和 ace 文本编辑器来创建网页 IDE。

当我将鼠标悬停在数据上时,我需要它在给定位置找到符号。这在某些情况下可以通过调用 roslyn 方法来实现:

var symbol = SymbolFinder.FindSymbolAtPosition(semanticModel, offset, dotNetCodeManager.Solution.Workspace, cancellationToken);

下例中我将鼠标悬停在单词 "table" 上时,这种情况的一个示例。

var SchemaName = table.Schema.Name;

然而,当我将鼠标悬停在“架构”或“名称”一词上时 SymbolFinder.FindSymbolAtPosition returns null。

但是: 如果我转到单词 table 的末尾并询问自动完成信息,我会在推荐符号列表中得到 Schema

 var result = Recommender.GetRecommendedSymbolsAtPosition(semanticModel, offset, solution.Workspace);

如何让 roslyn 查找作为对象的属性、方法或字段的符号?

所以 FindSymbolAtPosition 应该工作得很好——毕竟我们使用的 API 是一样的,比如转到定义或任何其他核心语言功能。我会猜测 这里是您的编译或语义模型不完整,因此当我们出于某种原因尝试绑定架构或名称时。建议 API 可能能够找出父级的类型并知道它有成员,但由于某些原因,这些成员没有正确绑定。

我建议您在语义模型或​​编译中尝试,调用 GetDiagnostics 并确认那里没有任何意外错误。您可能遗漏了一个导致一切偏离正轨的参考,清除它将使这项工作正常进行。