原生生物Protoc编译器选项

时间:2015-03-16 15:43:29

标签: java c# c++ protogen 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#我需要在Protogen中使用-p:detectMissing选项,使用Protoc的等效选项是什么?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

如果我正确地理解了这个问题,那么它就不是真正的等同物。选项 - 它们是具有不同预期用途的不同工具。如果您的主驱动程序类似于类似用法,您可能需要查看protobuf-csharp-port,它在转移到C#时保留了非常相似的用法。相比之下,protobuf-net并不试图提供与google相同的API - 它充当了惯用的.NET序列化器,恰好以protobuf格式进行通信。