2012-04-12 8 views
2

1つの.protoファイルに基づいて複数のファイル(1クラスに1つ)を出力することは可能ですか?私は現在、すべて単一のファイルに、約200のクラスを出力し、非常に大きな.protoファイルで働いているprotogenでファイルごとに1つのC#クラスを出力しますか?

。生成されたクラスを使用する必要がある場所の1つは、メモリが制限された環境(Windows Phoneのバックグラウンドエージェント)です。

私は唯一の制約された環境で読み込まれたアセンブリで必要なクラスが含まれるが、生成されたクラスは、すべて単一のファイルにある場合、容易にこれを行うことはできませんできるようにしたいと思います。複数のファイルに出力させることができれば、制約のある環境のアセンブリで必要なものだけをリンクすることができます。

protogen出力別々のファイル内のクラスを持っている方法はありますか?私はこれのオプションを見ることができず、現在はumbrella-classnameオプションのみを使用しています。 protogenはそれを行うことはできませんので、もし

が手動で生成されたファイルを編集するオプションではありません、複数のクラスを含むファイルを分割することができます可能な他のコマンドラインツールはありますか? (車輪の再発明保存します。)

アップデート私はGoogle.ProtocolBuffers.dll継承意思決定と簡単changableないを使用してい

.protoファイルの編集/分割も可能性はありません。 (カスタム・ステップなどを除きます。)

+0

使用しているライブラリを明示できますか?このprotobuf-netは何ですか?また、ソース.protoオプションを分割していますか? –

+0

@MarcGravell更新された質問 –

+0

ありがとう、それは(どちらのライブラリにも "protogen"と呼ばれるツールがありますが、これは曖昧さを解消するのに便利です)。 –

答えて

0

我々はcsharp_optionsで、このためのオプションを持っているが、それは実現していない:あなたは、関連するファイルにを削除して、あなたはすべて持って作る必要があるだろうことを考えると

// Whether to generate a single file for everything within the 
// .proto file (false), or one file per message (true). 
// This option is not currently honored; please log a feature 
// request if you really want it. 
optional bool multiple_files = 4; 

依存関係は右私はあなたのprotoファイルを別々のものに分割することです私は示唆している解決策を介して多くの仕事を実際に保存しないように聞こえるあなたはこれも "可能ではない"と言うが、今すぐ提案 - なぜそれは可能ではないですか?

編集:私はちょうど別のアイデアを持っていました。あなたは、潜在的にその記述子に.protoファイルを解析するために(特に指定しない場合は自動的に行われます)protogenprotocステップを実行することができます。次に、別のプログラムにディスクリプタをロードし、他のprotobufメッセージと同じように変更します(ビルダーを作成し、メッセージを編集してビルドします)。次にディスクリプタを保存します。残りのディスクリプタにprotogenを使用して、必要なクラスのみを生成することができます。

+0

フィードバックJonに感謝します。 .protoファイルは外部から生成されるため、作成時点で分割することはできません。私はprotogenを呼び出す前にファイルの分割をスクリプトで試してみます。 –

+0

@MattLacey:「保存」に興味のあるメッセージがある場合は、それらを見つけて保持するのが合理的*簡単だと思います。 –

+0

@MattLacey:ちょっとテキストベースのアイデアがありました。私の編集を見てください。それは実現可能なはずです... –

関連する問題