0

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

4

4 回答 4

5

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

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

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

于 2009-02-07T08:27:21.237 回答
1

根据 Patrick Smacchia 的博客中的这篇博客条目Mono.Cecil vs. System.Reflection,NDepend 使用Mono.Cecil来分析程序集。

也许它可能有用。

于 2009-02-07T08:50:44.560 回答
0

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

于 2009-02-07T08:11:28.773 回答
0

该解决方案涉及对代码的静态分析——本质上,我们正在寻找类型 B 中类型 A 的依赖关系。开箱即用的 .Net 反射 API 只能带你到目前为止,在你不得不求助于解析 IL 之前——正如 Jon 所说低于此不可掉以轻心。下面的答案导致了一些可能有帮助的库,我将对它们进行调查:

于 2009-02-07T17:10:40.527 回答