是否有一种方法可以通过反射找到在方法中调用了哪些方法
本文关键字:方法 调用 可以通过 是否 一种 反射 | 更新日期: 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;这可能会有帮助。
关于ILSpyILSpy是开源的。net汇编浏览器和反编译器。
开发开始后,红门宣布免费版本的. net Reflector将于2011年2月底停止存在。