我试图在一个针对原状网设备的Unity3D项目中使用Marc的C#协议缓冲区实现。
我设法使用C#从协议缓冲区文件MyFile.proto创建了一个protogen文件(让我们称之为MyFile.cs)。
导入文件和protobuf-net.dll (我在统一文件夹中使用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,但对于最后一个失败的compile.It,似乎没有在核心dll中声明Deserialize方法:
错误CS0117:
ProtoBuf.Serializer' does not contain a definition for反序列化
我读过这个文章,但它似乎已经过时了。它指的是protobuf-net的旧实现。我希望在这段时间里有什么改变。
我的问题是:
protobuf-net r602从Unity3D瞄准iOS设备,而不使用
创建要序列化/反序列化的模型类的库dll (程序集)就像链接的博客文章中建议的那样?我希望有一个更快的工作流,可能直接导入protogen在Unity3D项目中生成的Unity3D文件。
dll?让上述代码片段在iOS设备上再次工作的步骤是哪些?发布于 2018-03-26 18:06:57
我相信这是解决办法:
在iOS上,苹果不允许在运行时编译JIT存在一个问题,从而阻止了protobuf的使用。它可以用Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER",“是”来解决;在使用任何原型之前,它只能在.NET 4.6上工作。(我试用了3.5,但有关JIT的错误仍然出现)
https://stackoverflow.com/questions/13725331
复制相似问题