gpt4 book ai didi

xamarin.ios - 如何将 Protobuf-Net 与 MonoTouch 一起使用?

转载 作者:行者123 更新时间:2023-12-04 06:09:37 26 4
gpt4 key购买 nike

有没有人真正做到了这一点?

我尝试了建议的方法here ,但是无论我如何生成预编译的序列化程序,mtouch 都无法将其复制到应用程序包中,从而导致运行时异常。我认为这是因为生成的二进制文件可能与 MonoTouch 不兼容。

我尝试了以下方法:

1) 我使用了包含在最新版本(这次是 r450)中提供的 iO 和 Mono 二进制文件来生成预编译的序列化程序。

2) 我使用源代码生成了两个不同的程序集,专为 MonoTouch 构建。第一个程序集使用符号 FEAT_SAFE;MONOTOUCH;NO_RUNTIME 构建,第二个程序集使用符号 FEAT_SAFE;MONOTOUCH;FEAT_COMPILER 构建。我已经定义了符号 MONOTOUCH 并使用它与使用 MONODROID 符号相同(请参阅 protobuf-net 源中的文件 CallbackAttribute.cs 和 Helpers.cs)。

我使用了这两个程序集并尝试从模拟器中的 MonoTouch 应用程序生成预编译的序列化程序。

但无论我使用哪个版本的预编译序列化程序,该程序集仍然不包含在应用程序包中,mtouch 发出:“警告:应用程序包中缺少库'MyLibrary.dll',无法提取内容”,尽管事实上i do reference it in my code .

最佳答案

我终于明白了。似乎当实际程序集名称与包含它的文件名不同时,mtouch 不会将它包含在应用程序包中。这就是我的情况。我正在生成这样的程序集:

model.Compile("Taxi.ProtoBufSerializers.MQTTContractsSerializer", "MQTTContractsSerializer.dll");

因此,假设 Protobuf-Net 将程序集名称设置为此方法的第一个参数并将其保存在第二个参数给出的文件名中,mtouch 将无法将其包含在应用程序包中。

但是,我想保留我的命名空间,所以我摆弄了 Protobuf-Net 的源代码来生成这样的程序集:
  • 文件路径:作为第二个参数给出;
  • 程序集名称:Path.GetFileNameWithoutExtension(path);
  • 模块名称:Path.GetFileName(path)。

  • 我目前没有在路径上执行任何验证,但我还不需要这样做。

    瞧:该示例可在模拟器和设备上运行。

    最后但并非最不重要的一点是,我不知道这是否是 mtouch 应该表现的方式,或者它是否是一个错误。但是,我将针对它提交错误报告。

    关于xamarin.ios - 如何将 Protobuf-Net 与 MonoTouch 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7928726/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com