在C#中,我们在.proto中有命名空间,我们从protobuf-net获得,我们没有得到任何命名空间 . 所以问题是如何使用namespacs / packages生成protobuf-net生成(并使用内部).proto文件 .
例如,当我们解析所有项目以生成.proto文件以将C应用程序连接到我们的C#应用程序时,我们得到了很多
enum AnimationCode {
None = 0;
Idle = 1;
//...
}
和
enum SessionCode {
None = 0;
//...
}
因此,当我们将该统一项目.proto文件提供给protogen编译器时,我们得到了大量的
枚举类型“SessionStateCode”没有名为“None”的值 .
和
请注意,枚举值使用C作用域规则,这意味着枚举值是其类型的兄弟,而不是它的子级 .
而且没有C代码 .
要点是这样,编码的C#消息至少可以从C中读取
2 回答
protobuf-net目前没有任何代码可以执行自动名称冲突修复,但我很想知道你是否有任何提议 . 另一种选择是:
在这里,.proto将在生成scema时使用
AnimationCode_None
;事实上,它将是:我已经检查了
MetaType
/ValueMember
API,看起来目前在运行时很难设置.Name
但是如果您更喜欢在运行时设置它们,那么可以在新版本中轻松修复(如this similar enum/MetaType fix)而不是用属性装饰 .你试过这个吗?