2

我已经从这里https://protogen.marcgravell.com/下载了 CLI protogen.exe,并尝试生成一个带有*Specified可选成员访问器的 C# 文件,如此处所述使用以下命令行:

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";'

而且我不明白,因为我的 proto 文件的第一行是:

syntax="proto2";

4

2 回答 2

2

警告来自descriptor.proto,而不是你的proto。我会考虑是否应该为导入的文件禁止此操作。

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

编辑:ShouldSerialize()在适当的时候提供方法,并且应该为此目的工作。

于 2018-05-24T17:55:17.200 回答
0

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

于 2020-07-23T10:51:16.750 回答