Может генерировать дополнительные поля правильно с 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? Может, как это сделать с протогеном?

Другие вопросы по тегам