Протоген Vs. Параметры компилятора Protoc

У меня есть некоторые.proto файлы, используемые для компиляции классов из Java, C++ и C#. Для Java и C++ я использую компилятор Protoc, а для C# я использую Protogen. Сценарии для создания класса Java / C++

@ECHO OFF
SET SRC_DIR=%~dp0

REM Make Java and C++

SET JAVA_OUT_DIR=%SRC_DIR%\..\taurus-messages-java\src\main\java
if not exist %JAVA_OUT_DIR% (
mkdir %JAVA_OUT_DIR%
)

SET CPP_OUT_DIR=%SRC_DIR%\..\taurus-messages-cpp
if not exist %CPP_OUT_DIR% (
mkdir %CPP_OUT_DIR%
)

protoc -I=%SRC_DIR% --java_out=%JAVA_OUT_DIR% --cpp_out=%CPP_OUT_DIR% %SRC_DIR%taurus-mux.proto
protoc -I=%SRC_DIR% --java_out=%JAVA_OUT_DIR% --cpp_out=%CPP_OUT_DIR% %SRC_DIR%taurus-backtest.proto

и для поколения класса C# у меня есть

@ECHO OFF
SET WORK_DIR=%~dp0
SET OUT_DIR=%WORK_DIR%\Messages
SET SRC_DIR=%WORK_DIR%\..\..\..\Taurus\trunk\taurus-messages-proto\

if not exist %OUT_DIR% (
mkdir %OUT_DIR%
)

cd %SRC_DIR%

protogen -p:detectMissing -i:taurus-backtest.proto -o:%OUT_DIR%\TaurusBacktest.cs
protogen -p:detectMissing -i:taurus-mux.proto -o:%OUT_DIR%\TaurusMux.cs

cd %WORK_DIR%

оба скрипта ссылаются на файлы.proto (конечно;]). Я выше C# скрипт, который я добавил -p:detectMissing для того, чтобы сгенерировать свойства, которые позволяют мне проверить, указано или нет поле; опция создает *Specified для всех полей, где IsRequired = false,

Мой вопрос прост, я хочу убедиться, что классы C#, C++ и Java остаются выровненными, но для C# мне нужно использовать -p:detectMissing вариант с Protogen, каков эквивалентный вариант с использованием Protoc?

Спасибо за ваше время.

1 ответ

Решение

Если я правильно понял вопрос, то на самом деле "эквивалентного" варианта не существует - это разные инструменты с разным предназначением. Если ваш основной драйвер похож на использование, вы, возможно, захотите взглянуть на protobuf-csharp-port, который сохраняет очень похожее использование при переходе на C#. В отличие от этого, protobuf-Net не пытается представить тот же API, что и Google, - он действует как идиоматический сериализатор.NET, который взаимодействует в формате protobuf.

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