用protogen输出每个文件一个C#类?

时间:2012-04-12 10:23:17

标签: c# protocol-buffers protogen

是否可以根据单个.proto文件生成protogen输出多个文件(每个类一个)?

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

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

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

手动编辑生成的文件不是一个选项,所以如果protogen无法做到,是否有另一个命令行工具可以拆分包含多个类的文件? (为了节省重新发明的轮子。)

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

1 个答案:

答案 0 :(得分: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,并仅生成您想要的类...