在.proto文件中使用导入时出错

时间:2014-01-15 09:51:48

标签: import protocol-buffers

我尝试使用import语句将名为test1.proto的proto文件导入另一个名为test2.proto的proto文件

import "com/test/test1.proto";

但我收到以下错误

com/test/test1.proto: File not found.
test2.proto: Import "com/test/test1.proto" was not found or had errors.

我尝试过很多方法来查找导入错误的原因但不能。那么有人可以告诉我正确的方法进行原型文件导入,以防上述声明出现问题吗?

5 个答案:

答案 0 :(得分:30)

您必须使用--proto_path命令行标志(又名-I)告诉protoc在哪里查找.proto个文件。如果您不提供路径,则默认情况下它只会搜索当前目录。请参阅the documentation(在页面末尾的“生成您的类”下),或键入protoc --help

答案 1 :(得分:11)

如果要为.NET和/或Visual Studio进行构建,则只需添加即可,即可在.csproj文件中的原型文件定义中添加额外的属性,以指定原型根目录,如下所示:

<Protobuf Include="Protos\ProtoFile.proto" GrpcServices="None" ProtoRoot="Protos\" /> 

这将清除所有导入和相关错误。

答案 2 :(得分:10)

如果您正在使用IntelliJ IDEA,请转到偏好设置 - &gt; Protobuf支持并添加.proto文件的路径。这样可以解决错误。

答案 3 :(得分:0)

Aarish Ramesh

最好的工作是将所有.proto文件放入同一文件夹,然后您无需注入完整路径,仅proto文件的名称就足够了。

import "your_fle.proto"

答案 4 :(得分:-1)

对于运行基于Bazel的项目的人,像这样的那样,在proto的{​​{1}}字段中添加所需的deps文件-

BUILD

native.proto_library( name = "test_message" srcs = "test_message.proto" deps = "//path/to/proto/you_are/importing:test1" test1文件的目标名称,就像test1.prototest_message文件的目标名称一样。