ProtoEnum 属性用于重命名冲突的默认值
ProtoEnum attribute usage for renaming conflicting default values
我正在尝试从大型 c# .net 代码库生成 c++ protobuf classes。枚举 'NotSet' 在整个枚举声明中用作默认值,因此我使用 ProtoEnum 属性为出现冲突的导出提供不同的名称。但是我发现我导出的 .proto 文件有 classes 并且这些枚举之一作为成员,它的默认值仍然使用原始名称,然后 protoc 无法生成 C++ 文件而不进行更正。
使用下面的例子,
[DataContract]
[ProtoContract]
public enum MyEnum
{
[EnumMember]
[ProtoEnum(Name = "MyEnum_NotSet", Value=0)]
NotSet,
SomeValue,
AndSoOn
}
在 class 我需要导出枚举作为我希望导出的成员出现。
[ProtoContract]
public class MyClass
{
[DataMember]
[ProtoMember(1)]
private MyEnum m_myEnum;
}
但是在导出的 .proto 文件中,这个 class 以原始枚举名称作为其默认值结束...
syntax = "proto2";
enum MyEnum {
MyEnum_NotSet = 0;
SomeValue= 1;
AndSoOn= 2;
}
message MyClass{
optional MyEnum m_myEnum= 1 [default = NotSet];
}
使用 protoc 生成 c++ 文件失败 - 枚举类型“MyEnum”没有名为“NotSet”的值。
我是否遗漏了某些步骤?
这是 protobuf-net 中的错误;我已经修复了 in this commit,它在 nuget 中尚不可用 - 但请注意,这仅适用于 v3(我没有 back-ported 对 v2 分支的修复)。
我正在尝试从大型 c# .net 代码库生成 c++ protobuf classes。枚举 'NotSet' 在整个枚举声明中用作默认值,因此我使用 ProtoEnum 属性为出现冲突的导出提供不同的名称。但是我发现我导出的 .proto 文件有 classes 并且这些枚举之一作为成员,它的默认值仍然使用原始名称,然后 protoc 无法生成 C++ 文件而不进行更正。
使用下面的例子,
[DataContract]
[ProtoContract]
public enum MyEnum
{
[EnumMember]
[ProtoEnum(Name = "MyEnum_NotSet", Value=0)]
NotSet,
SomeValue,
AndSoOn
}
在 class 我需要导出枚举作为我希望导出的成员出现。
[ProtoContract]
public class MyClass
{
[DataMember]
[ProtoMember(1)]
private MyEnum m_myEnum;
}
但是在导出的 .proto 文件中,这个 class 以原始枚举名称作为其默认值结束...
syntax = "proto2";
enum MyEnum {
MyEnum_NotSet = 0;
SomeValue= 1;
AndSoOn= 2;
}
message MyClass{
optional MyEnum m_myEnum= 1 [default = NotSet];
}
使用 protoc 生成 c++ 文件失败 - 枚举类型“MyEnum”没有名为“NotSet”的值。
我是否遗漏了某些步骤?
这是 protobuf-net 中的错误;我已经修复了 in this commit,它在 nuget 中尚不可用 - 但请注意,这仅适用于 v3(我没有 back-ported 对 v2 分支的修复)。