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

时间:2015-07-15 21:57:47

标签: c# symbols roslyn quickinfo

我使用roslyn API和ace文本编辑器来创建Web IDE。

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

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

这种情况的一个例子是当我将鼠标悬停在下面示例中的“table”一词上时。

var SchemaName = table.Schema.Name;

然而,当我将鼠标悬停在单词Schema或Name SymbolFinder.FindSymbolAtPosition上时,返回null。

然而: 如果我转到单词表的末尾并询问自动填充信息,我会在推荐符号列表中获得Schema

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

如何让roslyn找到属性,方法或对象字段的符号?

1 个答案:

答案 0 :(得分:4)

所以FindSymbolAtPosition应该可以正常工作 - 它是在我们用于定义或任何其他核心语言功能之类的所有相同的API之后。我在这里猜测的是你的编译或语义模型是不完整的,所以当我们尝试绑定Schema或Name时我们出于某种原因。推荐API可能能够找出父级的类型并知道它有成员,但由于某些原因,这些成员没有正确绑定。

我建议你尝试在语义模型或​​编译中,调用GetDiagnostics并验证那里没有任何意外错误。您可能会错过一个导致所有内容横向移动的引用,并且清除该引用将使此工作正常。