1

VS2008 と統合された最新バージョンの protobuf-net を使用しています。2 つのメッセージ (Message1 と Message2) を作成しました。1 つのメッセージは 1 つの proto ファイルに含まれています。Message1 で Message2 を参照しようとすると、コード ジェネレーター ツールで "Message2" is not defined というエラーが表示され、コード ファイルが生成されません。両方のメッセージのパッケージは同じです。
ツールが VS2008 と統合されているため、同じ .proto ファイル内のすべてのメッセージがコンパイルされることを期待しているようです。現在、次のように、Message1.proto ファイルに同じ名前の空のメッセージを貼り付ける必要があります。

message Message1 {
 optional Message2 message2 = 1;
}

message Message2 {
}

そして後でclass Message2fromの宣言を削除しMessage1.csます。このエラーを回避するために必要な設定はありますか、それとも空の宣言を提供する唯一の方法ですか? または、そうでない場合は、「extern」などのキーワードを含めて、この型の定義が別のクラスで利用可能であることをコンパイラに伝えることをお勧めします (Marc Gravell)。

4

1 に答える 1

2

私は持っている:

( File1.proto)

import "File2.proto";
message Message1 {
 optional Message2 message2 = 1;
}

( File2.proto)

message Message2 {
}

カスタム ツール ( ) を使用して (IDE で) それぞれ装飾されており、ProtoBufTool正常に動作しています。2 つの.csファイルが生成され、それぞれがファイルの下にネストされ、それぞれFile*.protoに必要な生成された型が含まれます。

私は何かを逃しましたか?最初のファイルを (単独で) インポートしたファイルから型を生成できると思いますが、それを行うには、実際にはパーサーを最初から作成する必要があります (現時点では、内部で google の .proto パーサーを使用しています)。

言語を変更し直す - それは私次第ではありません。しかし、単に(既存の)import宣言を意味していますか?

于 2010-04-10T19:26:33.417 に答える