确定.Net中两个类之间的属性调用

时间:2009-02-07 08:07:34

标签: .net reflection static-analysis

给定两个.Net类型,类型A和类型B,如何确定对类型B的所有属性调用(包括类型A的子类)?

4 个答案:

答案 0 :(得分:5)

您必须找到所有可执行成员(方法,属性,事件,构造函数)并调用MethodInfo.GetMethodBody以获取原始IL。然后解析该IL并查找对属性的访问权限。不要忘记在基类中声明虚拟方法。

祝你好运 - 6个月后见!说真的,这并不容易,听起来像是一个不寻常的要求。这里的大局是什么?

如果您不需要在执行时执行此操作,但只是想查看依赖项,您可能会发现NDepend会对您有所帮助。 (哎呀,也许NDepend公开了一个可以在执行时使用的API - 值得检查,我想。)

答案 1 :(得分:1)

根据Patrick Smacchia博客的博客文章Mono.Cecil vs. System.Reflection,NDepend使用Mono.Cecil来分析程序集。

也许它可能有用。

答案 2 :(得分:0)

你可以使用StackFrame和StackTrace类来做到这一点,但这通常被认为是一种不好的做法。

答案 3 :(得分:0)

解决方案涉及对代码的静态分析 - 本质上我们正在寻找类型B中类型A的依赖项。开箱即用的.Net反射API只能在你不得不求助于解析IL之前将其带到目前为止 - 正如乔恩在下面指出的那样,这一点不能掉以轻心。下面的答案导致了一些可能有所帮助的图书馆,我将对它们进行调查: