1

我正在尝试在针对设备的项目中使用 Marc Gravell 的protobuf-net C#协议缓冲区实现。Unity3DiOS

我设法使用. C#_MyFile.csMyFile.protoprotogen

导入文件后protobuf-net.dll(我在 unity 文件夹中使用 dll),我可以成功反序列化以前序列化的文件(我正在从 python 代码进行序列化,一切正常):

MyType myType;
using (var file = File.OpenRead("Assets/MyTypeBin")) 
{
  myType = ProtoBuf.Serializer.Deserialize<MyType>(file) ;
}

上述解决方案在模拟器上运行良好,但在针对iOS设备(es.ipad)时失败。

我试图从 to 切换,unity/protobuf-net.dllCoreOnly/ios/protobuf-net.dll最后一个它无法编译。似乎该Deserialize方法未在核心 dll 中声明:

错误 CS0117:ProtoBuf.Serializer' does not contain a definition for 反序列化'

我读过这篇文章,但它似乎已经过时了。它指的是protobuf-net. 我希望在此期间有所改变。

我的问题是:

  1. 是否可以使用protobuf-net r602定位iOS设备Unity3D

    创建要序列化/反序列化的模型类的库 dll(程序集)

    喜欢链接的博客文章中的建议吗?我想要一个更快的工作流程,可能直接导入项目内部C#生成的文件protogenUnity3D

  2. 如果是,如何?dll我需要参考哪些?使上述代码段在设备上再次工作的步骤是iOS什么?

4

1 回答 1

0

我相信这是解决方案:

在 iOS 上,Apple 存在一个问题,即不允许在运行时进行 JIT 编译,这会阻止 protobuf 的使用。可以用 Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes"); 在使用任何 protobuf 之前,但它仅适用于 .NET 4.6。(我在 3.5 上试过,关于 JIT 的错误仍然出现)

https://github.com/5argon/protobuf-unity

于 2018-03-26T18:06:57.757 回答