【问题标题】:Traverse a c# method and anazlye the method body遍历一个c#方法并分析方法体
【发布时间】:2010-08-05 18:47:13
【问题描述】:

在c#中遍历methodinfo最简单的方法是什么?

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

在 System.Reflection 中有:

mi.GetMethodBody().GetILAsByteArray()

这有点低级,需要“一些”工作才能遍历身体。

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

还有什么其他的选择吗?

【问题讨论】:

  • Cecil 和内存中的程序集有什么问题?
  • @Tim:我找到了这个markmail.org/message/yssmfgrsqnnnzrvt,它有点旧了。 AssemblyFactory 中没有任何方法可以仅从文件、字节 [] 或 Stream 加载现有程序集。我尝试将 Boo 生成的程序集序列化为 byte[],但得到“Type System.Reflection.Emit.AssemblyBuilder 未标记为可序列化”。也许我在从程序集中检索 byte[] 时做错了。

标签: c# il methodinfo


【解决方案1】:

这件事应该有帮助:Reflection based CIL reader。对调用GetILAsByteArray()得到的字节数组进行操作

【讨论】:

  • 谢谢,应该这样做。谷歌搜索解决方案时一定错过了那个。
  • 至少你在问之前用谷歌搜索过。不像网站上的这么多;-)
  • 如果单声道团队的任何人正在阅读此内容,则说明运行时存在错误或其他问题:bugzilla.novell.com/show_bug.cgi?id=628660
猜你喜欢
  • 1970-01-01
  • 2015-02-09
  • 2021-12-28
  • 2021-09-07
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多