C#学习教程:.NETreflection:FindingtheTypesUsed我想做的是构建一个“地图”,说明对象在我正在处理的某些代码中的使用方式。将其视为增强的查找使用。展示这一点的最简单方法是通过示例:publicclassMasterClass{Type1type1;类型2类型2;类型3类型3;voidInitializeData(){type1=newType1(this);type2=newType2(这个);type3=newType3(这个);}}publicclassType1{privateMasterClass_master;publicType1(MasterClassmaster){_master=master;}publicvoidSomething(){//在这里使用_master.type2和_master.type3}}publicclassType2{privateMasterClass_master;publicType2(MasterClassmaster){_master=master;}publicvoidSomething(){//在这里使用_master.type3}}publicclassType3{privateMasterClass_master;publicType3(MasterClassmaster){_master=master;}publicvoidSomething(){//在此处使用_master.type1和_master.type2}}我想要做的是获取地图或报告,在示例中,会给出如下内容:Type1consumer:{Type3}Type2consumer:{Type1,Type3}Type3用户:{Type1,Type2}如果我能把它写进字典,那我就回家了。我尝试过的:我尝试遍历程序集、每种类型、每种方法,并拉动ILarrays,然后尝试解析操作数,但没有成功。我什至尝试用一些正则表达式查看源文件,但我有几千个类可供我使用,以几种不同的风格编写,这意味着我会错过一些参考。我可以使用Reflector&&/||Resharper一次只获取一个参考,但我想一次获取所有参考。有什么建议么?这并不容易。对于以下所有内容,您必须获取MethodInfo、PropertyInfo、FieldInfo等的实例:然后,您需要解析IL并在您要检查的类型所在的Module实例上调用ResolveMethod的实例,然后查看该实例是否与您尝试确定的内容匹配与所使用的方法对应的MethodInfo。编辑:就像VisualStudio中的“查找所有引用”一样,这只会找到直接引用。如果您还想查找间接引用(例如:method1引用method2,method2引用method3-您想要查看从method1到method3的连接),您需要使用递归来完成此操作。我建议使用NDepend,因为它是针对您描述的问题量身定制的。在代码中执行此操作将需要大量工作。如果您只是在寻找一种工具,可能有一些适用于Reflector的附加组件。您可以在这里找到各种插件:http://reflectoraddins.codeplex.com/有一些插件,例如FileGenerator,可以将Reflector输出直接复制到文件中。试试JbEvain的CILReader或者Cecil他这里提到了一个很好的解决方案以上就是C#学习教程:.NETreflection:Findthetypesused分享全部内容如果对大家有用需要了解更多C#学习教程,希望大家以后会多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
