2013-05-30 29 views
2

我是一個非常高興protobuf網野營。到目前爲止,我一直使用定期protobuf網與[ProtoMember],[ProtoInclude]和朋友標記取得巨大成功。protobuf-net核心文檔/概述

但是現在我意識到我需要遷移到protobuf-net核心,預生成序列化類,特別是能夠在iOS的AOT環境中執行。

這就是所有的常規,我從speficically this blog post發現了一些好的指針,並開始遷移我的protobuf網集成,但有關該主題的信息不完全亂丟interwebs - 至少不是我的谷歌覆蓋的擴展 - 福。

當我遇到另一個障礙時,從源頭挖掘並試圖弄清楚發生了什麼,我變得有點沮喪。我可以真正使用protobuf-net核心與普通品牌的概述/意圖/指導方針。

我最近遇到的是「非公開類型不能用於完整的dll編譯」的限制,目前看起來有點任意,但肯定很煩人,因爲它對我現有的設計有影響(這就是爲什麼我很高興擺脫了常規.net二進制序列化器支持protobuf-net)。

任何經驗分享/ postmortem或類似的有用資源將不勝感激。

編輯:剛剛完成,這裏是到目前爲止我的串行器生成器工具:https://gist.github.com/AngryAnt/a19d8c67155163936aae

回答

1

首先要注意的事情是,你的文章鏈接是過時的:有工具在protobuf網本身幫助處理這種情況 - 預編譯工具。請參閱http://marcgravell.blogspot.co.uk/2012/07/introducing-protobuf-net-precompiler.html

至於對非公開類型的限制:該限制不是任意的:它是核心.net運行時的程序集驗證的一部分。正式的程序集不能引用不允許的東西。如果它嘗試了,它不會通過驗證。在內存中運行時,您可能會冒出一些煙霧和鏡像,但不能像dll那樣運行。

但是!這裏仍有潛在的選擇 - 特別是[InternalsVisibleTo]。我已經做了一些工作,讓預編譯器用這個屬性來做事情。我懷疑如果你很樂意提名序列化dll爲「允許」,那麼要麼已經工作,要麼就可以調整工作。我真的不記得(沒有檢查)這種情況是否包括那些 - 但我嫌疑人它是。

這可能更多的是protobuf-net本身的討論,而不是一個stackoverflow問題。取而代之,我們可能值得采用它。

+0

嘿馬克。對於遲到的回覆抱歉。我沒有料到你會收到如此迅速的迴應:)關於非公開限制,如果我脫離對抗,我很抱歉。我認爲反思會使需求無效,但我可以明白爲什麼避免依賴這個要求是最有意義的。我已經完全在我的谷歌搜索中錯過了你的博客。這是最新的關於protobuf-net的新聞和文檔的主要去處?預編譯器確實聽起來像我所需要的。你究竟在哪裏建議我們移動談話?再次感謝:) – AngryAnt

+0

@AngryAny通常,在構建時,就在構建DTO之後;例如:'precompile {some path} \ MyDto.dll -o:MySerializer.dll -t:MySerializer' –

+0

我不確定我是否按照你的迴應:) – AngryAnt