【问题标题】:Not finding all of the symbols I need,How to find more symbols using the Roslyn API没有找到我需要的所有符号,如何使用 Roslyn API 找到更多符号
【发布时间】:2015-10-05 04:07:17
【问题描述】:

我正在使用 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 找到属于对象的属性、方法或字段的符号?

【问题讨论】:

  • 我假设你确定的 Schema 和 Name 不是 null?
  • 当我从推荐者那里获得架构和名称作为建议时,它们不为空。但符号查找器无法找到这些符号。由于推荐人找到了它们,我假设它们可以从我导入的程序集中找到。

标签: c# symbols roslyn quickinfo


【解决方案1】:

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

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

【讨论】:

  • 我想就是这样,谢谢。找不到任何命名空间。我确实想看看 GetSyntaxDiagnostics 和 GetDeclarationDiagnostics 但他们没有告诉我任何错误。感谢 GetDiagnostics 提示
  • 搞定了。我包括了参考资料,但在添加它们后我没有在我的工作区上使用 TryApplyChanges。愚蠢的错误。谢谢杰森!
猜你喜欢
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
相关资源
最近更新 更多