如何通过项目文件启用protobuf-net.BuildTools的OneOf支持
解决方案
- 优先升级NuGet包:3.0.101版本的
protobuf-net.BuildTools存在已知的oneof枚举生成缺陷,将protobuf-net和protobuf-net.BuildTools升级至3.2.30及以上的3.x稳定版即可修复csproj全局OneOf属性不生效的问题。 - 若不便升级版本,可在.proto文件头部添加配置声明,优先级高于csproj配置,旧版本也可兼容:
syntax = "proto3"; // 新增以下两行配置 import "protobuf-net/protobuf-net.proto"; option (protobuf_net.file).oneof = enum; message ExampleMessage { oneof SomeGroup { int32 foo = 1; string bar = 3; double baz = 4; } }
- 若上述操作后仍未生成枚举,需要检查csproj是否存在项配置冲突:默认配置下项目会自动扫描所有.proto文件作为Protobuf项,和你手动添加的AdditionalFiles配置冲突,在csproj的
<PropertyGroup>节点下添加以下配置关闭自动扫描即可:
<Protobuf_AutoInclude>false</Protobuf_AutoInclude>
完成配置后清理项目并重新生成,就能在生成的ExampleMessage类中看到对应的SomeGroup.OneOfCase枚举定义。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

