我使用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找到属性,方法或对象字段的符号?
答案 0 :(得分:4)
所以FindSymbolAtPosition
应该可以正常工作 - 它是在我们用于定义或任何其他核心语言功能之类的所有相同的API之后。我在这里猜测的是你的编译或语义模型是不完整的,所以当我们尝试绑定Schema或Name时我们出于某种原因。推荐API可能能够找出父级的类型并知道它有成员,但由于某些原因,这些成员没有正确绑定。
我建议你尝试在语义模型或编译中,调用GetDiagnostics
并验证那里没有任何意外错误。您可能会错过一个导致所有内容横向移动的引用,并且清除该引用将使此工作正常。