Может генерировать дополнительные поля правильно с protogen.exe
Я скачал CLI protogen.exe отсюда https://protogen.marcgravell.com/ и пытаюсь сгенерировать файл C# с *Specified
средства доступа для необязательных членов, как указано здесь с использованием этой командной строки:
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";
1 ответ
Предупреждение исходит от descriptor.proto, а не от вашего прото. Я рассмотрю, должно ли это быть подавлено для импортированных файлов.
Проблема "обнаружение пропажи" заключается в том, что предыдущий ответ устарел и относится к версии протогена r668. Инструмент Protogen был полностью переписан как полностью управляемый код в прошлом году, и, вероятно, эта функция либо больше не применяется, либо реализована по-другому. Я не за компьютером, чтобы проверить, но: это фундаментальная причина. Если вы запускаете инструмент без каких-либо опций, он должен показать вам поддерживаемое использование.
Редактировать: ShouldSerialize()
методы предоставляются, когда это уместно, и должны работать для этой цели.
Это устаревшая проблема. Мне нужно разобрать сообщения Google Protobuf 2 в.NET. Итак, Марк, пожалуйста, поясните, будет ли ваша текущая версия protobuf-net (и будущие версии) поддерживать метод Protobuf 2 has_(). Если да, может ли protogen сгенерировать метод has_() из файла proto? Может, как это сделать с протогеном?