1

我正在构建一个 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)
    {

    }
}
4

2 回答 2

2

Mono.Cecil将是一个很好的起点。这个问题有很多答案链接的教程。

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

于 2013-01-09T19:15:26.710 回答
0

这非常类似于创建您自己的应用程序,例如.NET ReflectordotPeek。如果您想知道在类的方法中进行了哪些调用,则必须创建诸如 Reflector 之类的东西。另外,请查看ILSpy;它可能会有所帮助。

关于 ILSpy

ILSpy 是开源的 .NET 程序集浏览器和反编译器。

在 Red Gate 宣布 .NET Reflector 的免费版本将在 2011 年 2 月底停止存在之后,开发开始了。

于 2013-01-09T19:05:17.130 回答