可以使用 protogen.exe 正确生成可选字段

Can generate optional fields correctly with protogen.exe

我使用此命令行从此处https://protogen.marcgravell.com/ and I try to generate a C# file with *Specified accessors for optional members, as stated here 下载了 CLI protogen.exe:

protogen --csharp_out="." MyProtoFile.proto +p:detectMissing

所有使用值类型的可选成员都没有可空类型或 Specified 访问器。

我也经常收到这条警告信息:

google/protobuf/descriptor.proto(41,1,41,8): warning: no syntax specified; it is strongly recommended to specify 'syntax="proto2";' or 'syntax="proto3";'

我不明白,因为我的原型文件的第一行是:

syntax="proto2";

警告来自 descriptor.proto,而不是您的原型。我会考虑是否应该对导入的文件进行抑制。

"detect missing" 问题是因为之前的答案已经过时并且与 r668 版本的 protogen 有关。 protogen 工具在去年被完全重写为完全托管代码,并且大概该功能不再适用或以不同方式实现。我不是在 PC 上检查,但是:这是根本原因。如果您 运行 该工具没有任何选项,它应该会向您显示支持的用法。

编辑:ShouldSerialize() 方法在适当的时候提供,应该可以用于此目的。

这是一个遗留问题。我必须在 .NET 中解析 google Protobuf 2 消息。因此,Marc,请澄清您当前的 protobuf-net 版本(以及未来版本)是否支持 Protobuf 2 has_() 方法。如果是这样,protogen 可以从 proto 文件生成 has_() 方法吗?可以的,protogen怎么办?