2

Java、C++、および C# からクラスをコンパイルするために使用される .proto ファイルがいくつかあります。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 ファイルを参照します (もちろん ;])。-p:detectMissingフィールドが指定されているかどうかをテストできるプロパティを生成するために、上記の C# スクリプトを追加しました。このオプションは*Specified、 のすべてのフィールドに対して作成しますIsRequired = false

私の質問は簡単です。C#、C++、および Java クラスが整列されていることを確認したいのですが、C# の-p:detectMissing場合、Protogen でオプションを使用する必要があります。Protoc を使用した同等のオプションは何ですか?

御時間ありがとうございます。

4

1 に答える 1

1

私が質問を正しく理解していれば、実際には「同等の」オプションはありません。それらは、使用目的が異なる異なるツールです。メイン ドライバーが似たような使用法である場合は、protobuf-csharp-port を確認することをお勧めします。これは、C# に移行しても非常によく似た使用法を保持しています。対照的に、protobuf-net は google と同じ API を提示しようとはしません。protobuf 形式で会話する慣用的な .NET シリアライザーとして機能します。

于 2015-03-16T16:20:03.587 に答える