2010-08-05 71 views
8

什么是最简单的方法来遍历C#中的方法信息?遍历c#方法和anazlye方法体

我想遍历方法体并找到字段引用等,并检索类型。

在的System.Reflection有:

mi.GetMethodBody().GetILAsByteArray() 

这是有点低级别的,需要“一些”工作,我将能够穿过身体前。

我知道塞西尔存在,但是在使用塞西尔加载内存组件时存在问题。我正在使用的程序集并不总是“在磁盘上”,它可以是从例如编译的内存程序集。嘘,我不是一个干净的解决方案没有将程序集临时写入磁盘。

还有什么其他的替代方案呢?

+0

Cecil和内存中的程序集有什么问题? – 2010-08-05 10:37:13

+0

@Tim:我发现这个http://markmail.org/message/yssmfgrsqnnnzrvt,有点旧了。 AssemblyFactory中没有方法仅从文件,byte []或Stream加载现有程序集。 我试图序列化一个Boo生成的程序集到byte [],但得到了“Type System.Reflection.Emit.AssemblyBuilder未标记为可序列化”。 也许我会做一些错误从程序集检索一个字节[]。 – Marcus 2010-08-05 10:47:56

回答

7

这件事应该帮助:Reflection based CIL reader。它在通过调用GetILAsByteArray()获得的字节数组上运行。

+0

谢谢,应该这样做。在搜索解决方案时,一定错过了那个。 – Marcus 2010-08-05 10:50:27

+1

至少你在提问之前用google搜索了一下。在网站上并不像这么多;-) – 2010-08-05 11:15:06

+0

如果来自单一团队的任何人正在阅读此内容,那么在运行时会出现一个错误或其他内容: https://bugzilla.novell.com/show_bug.cgi?id= 628660 – Marcus 2010-08-05 11:20:13