我想通过多个程序集找出特定方法的所有上游调用者。
我不需要解析后期绑定引用或虚拟方法调用,简单直接的 CILcall
引用就可以了。
我看过几个选项:
- 反射器:工具的分析器部分不作为扩展点公开。
- FxCop:
CallGraph
该类需要在其中运行 FxCop 上下文。 - Roslyn:我不知道从哪里开始,但无论如何我对从源代码开始不感兴趣,我想给它一个程序集并使用字节码和元数据来代替。
- VS 插件:与反射器一样,调用层次结构工具不会向插件公开。
我想我唯一的解决方案是通过迭代程序集中的每个方法来向后工作,寻找call
我的源方法的指令,然后递归地为每个调用者方法重复该过程。
假设我提出的解决方案是可行的方法,那么最好的方法是什么?MethodInfo.GetMethodBody().GetILAsByteArray()
好像有点硬核。是否有任何库可以让 CIL 的使用变得简单(比如 Java 的 ASM)?