Фактический двоичный формат сериализации за это время вообще не изменился, поэтому фундаментальных блокировщиков нет.
Самым большим отличием функций между proto2 и proto3 является обработка значений по умолчанию / необязательных значений.Proto3 не имеет понятия «значение по умолчанию равно 4» (по умолчанию всегда ноль / ноль), и не имеет понятия явного указания значения, которое также является значением по умолчанию (ненулевые значения всегда отправляются, нули никогда непослал).Поэтому, если ваша схема proto2 использует ненулевые значения по умолчанию, переход может быть неуклюжим.
При тестировании этот .netcore работает только с синтаксисом protobuf3.0.
Это утверждение заставляет меня думать, что вы не используете protobuf-net (теги), но на самом деле вы используете реализацию C # от Google - оригинальный порт Джона был только proto2, а версия, перенесенная в базу кода Google, - только proto3.Однако protobuf-net (отдельная реализация) не имеет таких ограничений и поддерживает как proto2, так и proto3 на всех платформах, включая .NET Core.Однако у него другой API.Protobuf-net можно найти в nuget , с инструментом обработки .proto, доступным здесь (он также предоставляет доступ ко всем выводам «protoc», если вы хотите сравнить с версией Google).