【问题标题】:Using Protobuf-Net In Xamarin.iOS without full AOT在没有完整 AOT 的 Xamarin.iOS 中使用 Protobuf-Net
【发布时间】:2013-04-12 11:41:51
【问题描述】:

除了此方法之外,是否有任何替代方法可以使用 protobuf-net 在 Xamarin.iOS (Monotouch) 中实现对象的序列化和反序列化:

http://www.frictionpointstudios.com/blog/2011/3/31/using-protobuf-net-serialization-in-unity-iphone.html

阅读周围的一些人声称他们已经做到了(没有提供证据),但我的理解是 [iOS JIT==NO] 所以不太有意义。

如果唯一可能的解决方案是对所有相关类进行完全 AOT,那么合适的构建前/构建后事件命令行可能会自动为任何相关程序集执行此 AOT?

【问题讨论】:

    标签: xamarin.ios protobuf-net


    【解决方案1】:

    我听说很多人通过这条途径取得了成功,但我也无法提供书面证据。

    那个方法有点过时了——我已经简化了几个步骤;有一个独立的预编译工具应该可以工作:

    • 为要序列化的 DTO 创建一个项目/程序集,该项目/程序集引用 适当版本 protobuf-net;大概是 CoreOnly/ios,理想情况下将该 dll 设置为复制到输出目录(它只是让生活更轻松)
    • 运行

      precompile "SomePath/YourDto.dll" -t:MySerializer -o:MySerializer.dll
      

      (可能在此之前使用mono 以获取单声道来托管 exe)

      这应该解析框架并编译一个您可以引用的MySerializer.dll,它涉及零 JIT(MySerializer.dll 将引用您的 dto dll 和您的 dto dll 引用的 protobuf-net 版本)

    • 现在引用您的 dto dll、序列化程序 dll 和 protobuf-net dll,只需使用 new MySerializer().Serialize(...) 就可以正常工作
    • 当你编译你的解决方案时,项目应该都很好地 AOT

    我很乐意提供指导,但目前我没有 mac,所以我现在无法检查。如果您遇到任何问题,请告诉我。如果不能解析框架,可以加-f:{path to the framework assemblies}给个提示。

    【讨论】:

    • 嘿,马克,谢谢你的回答。您是否知道不需要此预编译步骤的解决方案?
    • @MarcF 是最佳选择,我会推荐它。我猜您对 Silverlight 构建感到满意 - 这可能有效,但不会那么快(如果数据很小,这无关紧要),但可能会遇到一些边缘情况。我很想知道这是怎么回事。
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多