原型与。 Protoc 编译器选项
Protogen Vs. Protoc Compiler Options
我有一些 .proto 文件用于从 Java、C++ 和 C# 编译 classes。对于 Java 和 C++,我使用 Protoc 编译器,对于 C#,我使用 Protogen。 Java/C++ class 创建的脚本是
@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# class 代,我有
@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
以生成允许我测试是否指定字段的属性;该选项为 IsRequired = false
的所有字段创建 *Specified
。
我的问题很简单,我想确保 C#、C++ 和 Java classes 保持对齐,但对于 C# 我需要使用 Protogen 的 -p:detectMissing
选项,使用 Protoc 的等效选项是什么?
感谢您的宝贵时间。
如果我正确理解了这个问题,那么实际上并没有 "equivalent" 选项 - 它们是具有不同预期用途的不同工具。如果您的主要驱动程序是 like-for-like 用法,您可能需要查看 protobuf-csharp-port,它在迁移到 C# 时保留了非常相似的用法。相比之下,protobuf-net 没有尝试呈现与 google 相同的 API - 它充当惯用的 .NET 序列化程序,恰好以 protobuf 格式进行对话。
我有一些 .proto 文件用于从 Java、C++ 和 C# 编译 classes。对于 Java 和 C++,我使用 Protoc 编译器,对于 C#,我使用 Protogen。 Java/C++ class 创建的脚本是
@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# class 代,我有
@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
以生成允许我测试是否指定字段的属性;该选项为 IsRequired = false
的所有字段创建 *Specified
。
我的问题很简单,我想确保 C#、C++ 和 Java classes 保持对齐,但对于 C# 我需要使用 Protogen 的 -p:detectMissing
选项,使用 Protoc 的等效选项是什么?
感谢您的宝贵时间。
如果我正确理解了这个问题,那么实际上并没有 "equivalent" 选项 - 它们是具有不同预期用途的不同工具。如果您的主要驱动程序是 like-for-like 用法,您可能需要查看 protobuf-csharp-port,它在迁移到 C# 时保留了非常相似的用法。相比之下,protobuf-net 没有尝试呈现与 google 相同的 API - 它充当惯用的 .NET 序列化程序,恰好以 protobuf 格式进行对话。