[英]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.