如何在proto文件导入语句中使用相对路径?

时间:2012-01-25 22:31:10

标签: c# protobuf-net

我正在使用protobuf-net的ProtoBufTool自定义工具从.proto文件生成C#类。到目前为止,我还无法在proto文件中获取import语句来处理相对路径。以下是我的情况:

我的项目中有2个原型文件,如下所示:

directory layout

User.proto:

package Models;

message User {
    required int32 ID = 1;
    required string Username = 2;
    // etc...
}

UserSearch.proto:

package Models.Messages;

import "../User.proto";

message UserSearchRequest {
    optional string Query = 1;
    optional int32 Limit = 2;
    optional int32 Offset = 3;
}

message UserSearchResult {
    required int32 NumResults = 1;
    required int32 NumReturned = 2;
    repeated User Users = 3;
}

User.cs文件生成正常但在UserSearch文件上失败。这是我在错误列表窗口中看到的。

  • 自定义工具错误:.. / User.proto:找不到文件。
  • 自定义工具错误:UserSearch.proto:未找到导入“../User.proto”或有错误。
  • 自定义工具错误:UserSearch.proto:22:18:未定义“用户”。

为了记录,我尝试使用\\代替/,我得到了相同的结果。如果两个proto文件位于同一目录中并删除../,则import语句也能正常工作,但这不是我想要安排文件的方式。

如何在import语句中获取相对路径?

1 个答案:

答案 0 :(得分:3)

简短回答 - 在与protoc(谷歌的.proto解析器)交谈时,我必须对工具及其使用的路径有一个错误。我将不得不看一下并解决它。

更尴尬的答案; 如果你不介意使用命令行工具,你可以使用google的protoc使用--descriptor_set_out={file}编译.proto到二进制文件,使用你选择的任何--proto_path选项(所以到目前为止,这纯粹是谷歌工具);然后,您可以将编译后的描述符集作为输入传递给protogen(它处理任一格式)。

这对于脚本化构建是可以的,但您不希望手动执行此操作!我会试着看看工具有什么问题。已添加到列表中。