2

私はとても幸せな protobuf-net キャンパーです。これまでのところ、[ProtoMember]、[ProtoInclude]、および友人のマークアップで通常の protobuf-net を使用して大きな成功を収めています。

ただし、特にiOS上のUnityのAOT環境で実行できるようにするには、protobuf-netコア、事前生成のシリアル化クラスに移動する必要があることに気付きました。

それはすべてグルーヴィーであり、具体的にこのブログ投稿からいくつかの良い指針を見つけ、protobuf-net 統合の移行を開始しましたが、この件に関する情報はインターウェブを正確に散らかしているわけではありません-少なくとも私のグーグルフーでカバーされている範囲ではありません.

次から次へと障害に遭遇し、ソースを掘り下げて何が起こっているのかを理解しようとすると、少しイライラします。protobuf-netコアと通常のブランドの概要/意図/ガイドラインのようなものを実際に使用できます。

私の最近の遭遇は、「非パブリック型は完全な dll コンパイルでは使用できません」という制限です。これは、現時点ではやや恣意的なように見えますが、既存の設計に影響を与えることを考えると、間違いなく非常に厄介です (削除してよかった理由です) protobuf-net を支持する通常の .net バイナリ シリアライザーの私自身)。

経験の共有/事後調査または同様の役立つリソースをいただければ幸いです。

編集:完成のために、これまでの私のシリアライザージェネレーターツールは次のとおりです:https://gist.github.com/AngryAnt/a19d8c67155163936aae

4

1 に答える 1

1

最初に注意すべきことは、リンク先の記事が古くなっていることです。protobuf-net 自体には、このシナリオを処理するのに役立つツール、プリコンパイル ツールがあります。http://marcgravell.blogspot.co.uk/2012/07/introducing-protobuf-net-precompiler.htmlを参照してください。

非パブリック型の制限について: この制限は恣意的なものではありません: コア .net ランタイムによるアセンブリ検証の一部です。正式なアセンブリは、許可されていないものを参照できません。試してみると、検証に合格しません。メモリ内で実行している場合は、いくつかの煙とミラーを回避できますが、dll としては回避できません。

でも!ここにはまだ潜在的なオプションがあります - 特に[InternalsVisibleTo]. プリコンパイラがこの属性を使用して処理を実行するように、すでにいくつかの作業を行っています。シリアライゼーション dll を「許可」として喜んで指名する場合、それは既に機能しているか、機能するように微調整される可能性があると思います。このシナリオが含まれていたかどうかは(確認せずに)思い出せませんが、そうだったのではないかと思います

これはおそらく、stackoverflow の質問ではなく、protobuf-net 自体の議論のようなものです。代わりにそこに持っていく価値があるかもしれません。

于 2013-05-30T19:45:12.543 に答える