2

是否可以基于单个 .proto 文件让 protogen 输出多个文件(每个类一个)?

我正在使用一个非常大的 .proto 文件,该文件输出大约 200 个类,目前都在一个文件中。我需要使用生成的类的地方之一是内存高度受限的环境(Windows Phone 后台代理)。

我希望能够在受约束的环境中加载的程序集中只包含必要的类,但是当生成的类都在一个文件中时不能轻易做到这一点。如果我可以将它们输出到多个文件,我只能链接到我在程序集中需要的受约束环境的文件。

有没有办法让 protogen 在单独的文件中输出类?我看不到此选项,目前仅使用该umbrella-classname选项。

手动编辑生成的文件不是一种选择,所以如果 protogen 不能这样做,是否有另一个可用的命令行工具可以拆分包含多个类的文件?(为了避免重新发明轮子。)

更新
我正在使用Google.ProtocolBuffers.dll继承的决定并且不容易改变。
编辑/拆分 .proto 文件也不可行。(除非作为自定义步骤。)

4

1 回答 1

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;

鉴于您必须删除相关文件并确保您拥有正确的所有依赖项,听起来它实际上不会为您节省很多工作而不是我建议的解决方案,即将您的原始文件拆分为单独的文件您说这“也不可能”,但基本上这就是我目前所能建议的全部 -为什么这不是一种可能性?

编辑:我刚刚有了另一个想法。您可能会运行protoc步骤protogen(如果您没有另外指定,现在会自动完成)将.proto文件解析为其描述符。然后在另一个程序中加载描述符,像对任何其他 protobuf 消息一样对其进行变异(从它创建一个构建器,编辑消息,构建),然后保存描述符。然后,您可以在剩余的描述符上使用 protogen,并仅生成您想要的类...

于 2012-04-12T13:02:32.763 回答