【问题标题】:Recursively Find References in Solution (Visual Studio) [closed]在解决方案中递归查找引用(Visual Studio)[关闭]
【发布时间】:2020-12-02 04:21:13
【问题描述】:

对于给定的方法名 x,我想查找调用 x 的方法的所有方法名。我想递归地这样做,直到我到达我的代码的入口点。我在this post 中找到了一种使用 Roslyn 对 C# 代码执行此操作的方法,但我希望该解决方案尽可能与语言无关。它应该适用于 C#、C++、Python ......我正在用 C# 编写这个工具,并且需要一个编程解决方案。任何帮助是极大的赞赏。谢谢!

【问题讨论】:

  • 这是用于在 IDE 中工作,还是在运行时需要它?如果您不需要以编程方式找到这个,VS 有一个称为调用层次结构的工具,您可以使用它?
  • 我一直在寻找程序化解决方案,但这实际上也很有帮助。我不敢相信我不知道这个工具。你知道是否有办法以编程方式从调用层次结构中提取信息?我基本上想要一个代表整个路径的字符串。
  • 我不太确定,因为我不精通 VS 扩展开发。您也许可以开发自己的扩展。否则,由于引用更多是编译器功能,您可能必须通过 Microsoft.CodeAnalysis 使用 Roslyn。不幸的是,与 Roslyn 合作并不是我的强项。但这里有一个问题可能有助于朝着正确的方向开始? stackoverflow.com/questions/32974118/…

标签: c# visual-studio roslyn


【解决方案1】:

我不相信有任何 与语言无关的方式可以让您做到这一点。该工具必须至少了解语言的结构、函数或方法的外观以及函数或方法调用的外观。

编辑说明: 您可能会发现 Terence Parr 博士的 ANTLR 解析器生成器很有用:

https://www.antlr.org/

ANTLR 可以针对 C#,并且为它编写了大量的语法,包括 C++ 和 python。

使用它可以让您在运行时插入选择的解析器。解析器生成的 AST(抽象语法树)将具有相同的结构,因此将是一个树遍历来识别函数/方法调用。

每个解析器的输出可能都需要适配器,以便每个解析器生成的 AST 使用通用名称来表示您关心的事物。

【讨论】:

  • 我知道这一点。我所说的尽可能与语言无关的意思是,可能有一种解决方案支持设计上相似的多种语言。
  • 查看我的更新答案,以获取有关您可能使用的工具的建议。
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 2016-01-03
  • 1970-01-01
  • 2015-11-28
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多