【问题标题】:protobuf-net core documentation / overviewprotobuf-net 核心文档/概述
【发布时间】:2023-03-18 09:09:01
【问题描述】:

我是一个非常快乐的 protobuf-net 露营者。到目前为止,我一直在使用带有 [ProtoMember]、[ProtoInclude] 和朋友标记的常规 protobuf-net,并取得了巨大成功。

但是现在我意识到我需要迁移到 protobuf-net 核心,预生成序列化类,特别是能够在 iOS 上的 Unity 的 AOT 环境中执行。

这一切都太棒了,我从特别是 this blog post 中找到了一些好的指针,并开始迁移我的 protobuf-net 集成,但是有关该主题的信息并没有完全散布在互联网上——至少在我的谷歌所涵盖的范围内-fu。

当我一个接一个地遇到障碍,挖掘源代码试图弄清楚发生了什么时,我变得有点沮丧。我真的可以使用 protobuf-net 核心与常规品牌的概述/意图/指南。

我最近遇到的是“非公共类型不能与完整的 dll 编译一起使用”限制,目前这似乎有些武断,但考虑到它对我现有设计的影响(这正是我很高兴摆脱常规的 .net 二进制序列化程序,转而使用 protobuf-net)。

任何经验分享/事后分析或类似的有用资源将不胜感激。

编辑:只是为了完成,到目前为止,这是我的序列化器生成器工具:https://gist.github.com/AngryAnt/a19d8c67155163936aae

【问题讨论】:

    标签: protobuf-net


    【解决方案1】:

    首先要注意的是,您链接到的文章已过时:protobuf-net 本身中有工具可以帮助处理这种情况 - 预编译工具。请看http://marcgravell.blogspot.co.uk/2012/07/introducing-protobuf-net-precompiler.html

    至于对非公共类型的限制:这个限制不是任意的:它是核心 .net 运行时程序集验证的一部分。正式的程序集不能引用不允许的东西。如果它尝试过,它不会通过验证。在内存中运行时,您可以摆脱一些烟雾和镜子,但不能作为 dll。

    但是!这里仍然有一个潜在的选择 - 特别是[InternalsVisibleTo]。我已经做了一些工作来让预编译器使用这个属性来做一些事情。我怀疑如果您愿意将序列化 dll 指定为“允许”,那么它要么已经工作,要么可以调整工作。我真的不记得(不检查)这个场景是否包括在内 - 但我怀疑是的。

    这可能更像是 protobuf-net 本身的讨论,而不是 stackoverflow 问题。可能值得我们把它带到那里。

    【讨论】:

    • 嗨,马克。抱歉回复晚了。没想到你的反应这么快:)关于非公开限制,如果我冒犯了,我很抱歉。我在想反射会使要求无效,但我明白为什么避免依赖它是最有意义的。我在谷歌搜索中完全错过了你的博客。这是 protobuf-net 上最新新闻和文档的主要去处吗?预编译器确实听起来像我需要的。你到底是在建议我们把谈话转移到哪里?再次感谢:)
    • @AngryAny 通常在构建时,就在您构建 DTO 之后;例如:precompile {some path}\MyDto.dll –o:MySerializer.dll –t:MySerializer
    • 我不确定我是否遵循您的回复:)
    • @AngryAnt 哦,对不起。我误读了您之前评论的最后一行。我的错,对不起。如果您有具体示例或任何问题,请随时给我发电子邮件(请参阅我的个人资料页面)。
    • 嗨,马克。我在 6 月 13 日向该地址发送了一封电子邮件。只是想验证它是否通过了? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2017-10-23
    相关资源
    最近更新 更多