Compact Framework的Reflection.Emit的替代方案

时间:2009-09-05 15:08:54

标签: .net reflection compact-framework reflection.emit

似乎.NET CF缺少非常有用的Reflection.Emit。 到目前为止,我发现这个库是另一种选择:http://www.codeplex.com/EmitCF

然而,它似乎是一个废弃的早期版本,所以我正在寻找更多的选择。

有没有人知道Emit的另一种选择? 或者也许有人使用EmitCF并可以评论其状态?

顺便说一下,更大的图片:我正在尝试获取CF的Emit,这样我就可以让http://dynamic.codeplex.com在CF下工作,这样我就可以优化我正在使用的序列化代码({{ 3}})

2 个答案:

答案 0 :(得分:5)

您需要的是Cecil(http://mono-project.com/Cecil),一个Mono项目库,用于生成和检查CIL格式的程序和库。它被积极维护,比Reflection.Emit做得更多,并且它被用在很多项目中,包括一些以.NET CF为目标的项目。

答案 1 :(得分:1)

这不完全是你问题的答案,但由于CF中不支持Reflection.Emit,你可以采用的一种替代方法是序列化/反序列化,将你的类编译成常规的Windows应用程序,并制作使用Reflection.Emit以编程方式为每个类生成序列化和反序列化方法,然后可以将这些方法合并到CF版本的类中。基本上,您在完整的代码生成框架中使用Reflection.Emit。

这将是更多的工作(当然,这是更多工作的持续来源),但它的表现要好于基于Reflection.Emit的动态方法(无论如何都不适用于CF)。大多数CF类在完整框架中将保持不变,但当然不一定。