[英]protobuf-net into .proto generates enum conflicts?
在C#中,我們從protobuf-net獲得.proto中的名稱空間,但沒有任何名稱空間。 因此,問題是如何使protobuf-net生成(並在內部使用)具有名稱pacs / packages的.proto文件。
例如,當我們解析所有項目以制作.proto文件以將C ++應用程序連接到C#應用程序時,
enum AnimationCode {
None = 0;
Idle = 1;
//...
}
和
enum SessionCode {
None = 0;
//...
}
因此,當我們將該統一項目.proto文件提供給protogen編譯器時,我們得到了
枚舉類型“ SessionStateCode”沒有名為“ None”的值。
和
請注意,枚舉值使用C ++范圍規則,這意味着枚舉值是其類型的同級,而不是其子級。
而且沒有C ++代碼。
這樣做的目的是使編碼的C#消息至少可以從C ++讀取
盡管我很想知道您是否有任何建議,但是protobuf-net內部目前沒有任何代碼可以執行自動名稱沖突修復。 另一種選擇是:
enum AnimationCode {
[ProtoEnum(Name="AnimationCode_None")]
None = 0,
Idle = 1
}
在這里,.proto在生成scema時將使用AnimationCode_None
。 實際上,它將是:
enum AnimationCode {
AnimationCode_None = 0;
Idle = 1;
}
我已經檢查了MetaType
/ ValueMember
API,看起來目前很難在運行時設置.Name
,但是如果您願意,可以很容易地在新版本中MetaType
修復 (例如使用類似的enum / MetaType
fix )首選在運行時設置它們,而不用屬性裝飾。
你有嘗試過嗎?
package MyNamespace{
enum AnimationCode {
None = 0;
Idle = 1;
//...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.