Compact Framework 的 Reflection.Emit 替代方案
看来.NET CF缺少非常有用的Reflection.Emit。 到目前为止,我发现这个库作为替代方案: http://www.codeplex.com/EmitCF 。
然而,它似乎是一个废弃的早期版本,所以我正在寻找更多的选择。
有谁知道 Emit 的另一种替代方案? 或者也许有人使用过 EmitCF 并且可以评论其状态?
顺便说一句,更大的图景:我正在尝试为 CF 获取 Emit,以便我可以获得 http://dynamic。 codeplex.com 在 CF 下工作,因此我可以优化我正在使用的序列化代码 (http://www.codeproject.com/KB/XML/GR_CustomXmlSerializer.aspx)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你需要的是 Cecil (http://mono-project.com/Cecil),一个 Mono 项目用于生成和检查 CIL 格式的程序和库的库。它得到积极维护,比 Reflection.Emit 做更多的事情,并且在很多项目中使用,包括一些针对 .NET CF 的项目。
What you need is Cecil (http://mono-project.com/Cecil), a Mono project library to generate and inspect programs and libraries in CIL format. It's actively maintained, does a lot more than Reflection.Emit and it's used in a lot of projects, including some that target .NET CF.
这并不完全是您问题的答案,但由于 CF 不支持 Reflection.Emit,您可以采取的另一种序列化/反序列化方法是将您的类编译到常规 Windows 应用程序中,并利用 Reflection .Emit 以编程方式为每个类生成序列化和反序列化方法,然后可以将其合并回 CF 版本中的类中。基本上,您可以在完整的代码生成框架中使用 Reflection.Emit。
这将需要更多的工作(当然,这会是更多工作的持续来源),但它会比动态的、基于 Reflection.Emit 的方法(无论如何在 CF 中不起作用)表现得更好。当然,尽管不一定,但大多数 CF 类将在完整框架中保持不变。
This isn't exactly an answer to your question, but since Reflection.Emit isn't supported in CF, an alternative approach you could take to serialization/deserialization would be to compile your classes into a regular Windows application, and make use of Reflection.Emit to programatically generate serialize and de-serialize methods for each class, which could then be incorporated back into the class in the CF version. Basically, you'd use Reflection.Emit in the full framework for code generation.
This would be more work (and a constant source of more work, of course), but it would perform better than a dynamic, Reflection.Emit-based approach (which doesn't work in CF anyway). Most CF classes will work unchanged in the full framework, although not necessarily, of course.