如何判断一个方法中调用了哪些方法?我想列出从特定方法调用的所有方法。例如,如果我有以下代码:publicvoidtest1(){test2();测试3();}该列表应包含test2()和test3()。如果我能列出同一个类的方法以及另一个类的方法,那就太好了。另外,我想找到一种方法来检测方法使用了哪些字段:publicclassA{privateStringtest1="";私有字符串test2="";publicvoidtest(){Console.WriteLine(test1);}}所以它应该列出test1。我尝试使用Mono.Cecil,但不幸的是我找不到关于该项目的太多文档。那么有谁知道如何做到这一点?编辑:我想用Mono.Cecil来做,因为通过它的API,我可以直接在我的应用程序中使用结果。如果我使用VisualStudio或类似工具中的内置工具,则很难对结果进行处理。我没有实际使用过Cecil,但是HowTo页面显示了如何枚举类型,而你的问题似乎只需要循环遍历你的后续指令:CallandLoadField。这段示例代码似乎可以处理您提到的情况,但可能还有更多,您应该查看其他调用说明。如果你使它递归,确保你跟踪你检查过的方法。staticvoidMain(string[]args){varmodule=ModuleDefinition.ReadModule("CecilTest.exe");vartype=module.Types.First(x=>x.Name=="A");varmethod=type.Methods.First(x=>x.Name=="test");打印方法(方法);打印字段(方法);控制台.ReadLine();}publicstaticvoidPrintMethods(MethodDefinitionmethod){Console.WriteLine(method.Name);foreach(varinstructioninmethod.Body.Instructions){if(instruction.OpCode==OpCodes.Call){MethodReferencemethodCall=instruction.OperandasMethodReference;如果(methodCall!=null)Console.WriteLine(“t”+methodCall.Name);}}}publicstaticvoidPrintFields(MethodDefinitionmethod){Console.WriteLine(method.Name);foreach(varinstructioninmethod.Body.Instructions){if(instruction.OpCode==OpCodes.Ldfld){FieldReferencefield=instruction.OperandasFieldReference;if(field!=null)Console.WriteLine("t"+field.Name);}}}这不能简单地使用C#中的反射API来完成。确实,您需要解析原始源代码,这可能不是您正在寻找的解决方案。但是,例如,这就是VisualStudio获取此类信息以进行重构的方式。您可能可以在某个地方分析IL-就像Reflector所做的那样,但我认为这将是一项艰巨的工作。如果要付费,可以使用.NETReflector工具。您还可以查看此.NET方法依赖性,但它会变得棘手,因为您将进入IL。第三种可能是在VS中使用宏引擎,它确实有分析代码的工具CodeElement,我不确定它是否可以做依赖。以上就是C#学习教程:如何判断方法中调用了哪些方法?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
