如何用Reflection + C#获取所有引用

使用System.Reflection,我可以从特定的类中获取所有方法

我需要知道这些方法的参考是什么。 例如:在Visual Studio中,如果需要特定对象的引用

  • 右键单击对象并选择“查找所有引用”
  • Visual Studio显示此选定对象的引用

我想做同样的事情,但是从reflection或其他方式的代码。

我可以这样做吗?

这不能用reflection来完成。 Reflection是一种检查元数据和程序集的工具。 为了找到对给定方法/类型的所有引用,您需要检查程序集的基础IL。 reflection仅具有非常有限的ILfunction(简单地将其作为字节数组返回)。 您需要自定义检查该字节流,以便收集有关其引用内容的任何上下文。

这不是可以通过特定类的运行时reflection直接访问的东西。 您必须自省整个源代码树或生成的IL,以确定对具有相同名称的特定方法的任何引用是否是您尝试查找引用的方法的正确重载和签名。

此外,如果没有额外的工作,您永远不会找到对通过reflection调用的特定方法的引用。 (这就是混淆那种代码具有挑战性和容易出错的原因之一。)

如果您只是想查找参考资料以供参考,Reflector具有该function。

http://www.red-gate.com/products/reflector/

Microsoft在开源许可下发布了Common Compiler Infrastructure项目。 这些项目旨在支持许多与编译器相关的function,包括您所指的汇编分析。 文档是有限的,因此您需要全面了解ECMA-335 (公共语言基础结构),以便有效地将其用于您的目的。

这里没有魔法代码示例。 这是一项庞大且相当复杂的任务,您将自己完成大部分工作。