我试图在针对C#
设备的Unity3D
项目中使用Marc Gravell的protobuf-net iOS
协议缓冲区实现。
我设法使用C#
从协议缓冲区文件MyFile.cs
创建了一个MyFile.proto
文件(让我们称之为protogen
。
导入文件后protobuf-net.dll
(我在Unity文件夹中使用dll),我可以成功反序列化以前序列化的文件(我从python代码中进行序列化,所有工作细):
MyType myType;
using (var file = File.OpenRead("Assets/MyTypeBin"))
{
myType = ProtoBuf.Serializer.Deserialize<MyType>(file) ;
}
上述解决方案在模拟器上运行正常,但在定位iOS
设备(es.ipad)时失败。
我试图从unity/protobuf-net.dll
切换到CoreOnly/ios/protobuf-net.dll
,但是最后一个它无法编译。似乎Deserialize
方法未在核心dll中声明:
错误CS0117:
ProtoBuf.Serializer' does not contain a definition for
反序列化&#39;
我已经阅读了这个article,但它似乎已经过时了。它指的是protobuf-net
的旧实现。我希望同时有所改变。
我的问题是:
是否可以使用protobuf-net r602
定位iOS
来自Unity3D
的设备,而无需
像链接博客文章中建议的那样?我希望拥有更快的工作流程,可能直接导入创建您想要的模型类的库dll(程序集) 序列化/反序列化
C#
项目中protogen
生成的Unity3D
文件 如果是,怎么样?哪个dll
我需要参考?使上述代码段在iOS
设备上重新运行的步骤是什么?
答案 0 :(得分:0)
我相信这是解决方案:
在iOS上,Apple存在一个问题,即在运行时不允许JIT编译,这会阻止使用protobuf。它可以通过Environment.SetEnvironmentVariable(&#34; MONO_REFLECTION_SERIALIZER&#34;,&#34; yes&#34;)来解决;在任何protobuf使用之前,它只适用于.NET 4.6。 (我试过3.5并且关于JIT的错误仍然出现)