是否有一种方法可以通过反射找到在方法中调用了哪些方法

本文关键字:方法 调用 可以通过 是否 一种 反射 | 更新日期: 2023-09-27 17:51:17

我正在构建一个v4.5 c#/。NET应用程序,必须找出哪些方法依赖于一个方法。我想列出这些方法。

例如,如果我在一个类中有一个方法,如果这个方法使用了另一个方法:

public void Test()
{
    CallMethodA();
    CallMethodB();
}

当我将方法Test传递给我的应用程序时,我希望它通过反射打印出CallMethodA和CallMethodB。

到目前为止,我已经创建了这个:
MethodBase methodBase = typeof(TestClass).GetMethod("Test");
var instructions = MethodBodyReader.GetInstructions(methodBase);
foreach (Instruction instruction in instructions)
{
    MethodInfo methodInfo = instruction.Operand as MethodInfo;
    if(methodInfo != null)
    {
    }
}

是否有一种方法可以通过反射找到在方法中调用了哪些方法

单声道。塞西尔是个不错的开始。这个问题的答案中有很多教程链接。

然而,这只会给你静态分析,即在编译时的方法调用。如果你有对接口或虚拟方法的方法调用,那么你将不知道在运行时实际调用了哪些其他方法。如果您想知道在运行时实际调用了哪些代码,您需要通过插装收集覆盖率信息。

这非常像创建您自己的应用程序,如。net Reflector或dotPeek。如果你想知道在一个类的方法中调用了什么,你必须创建一个类似Reflector的东西。另外,一定要查看ILSpy;这可能会有帮助。

关于ILSpy

ILSpy是开源的。net汇编浏览器和反编译器。

开发开始后,红门宣布免费版本的. net Reflector将于2011年2月底停止存在。