我正在努力为grpc导入编写正确的配置。
.net解决方案的结构类似于:
\ Protos \ Common \ common.proto
\ Protos \ Vehicle \ car.proto
\ CarMicroservice
在car.proto内部,我有:import "common.proto"
我想要的是生成的grpc代码位于项目内部 CarMicroservice。
在CarMicroservice.csproj内部,我已经编写了原型的路径:
<Protobuf Include="common.proto" ProtoRoot="..\Protos\Common\" />
<Protobuf Include="car.proto" ProtoRoot="..\Protos\Vehicle\" />
但是出现错误:'common.proto'没有这样的文件或目录
问题是: 如何在car.proto内部正确导入common.proto?
注意:我已经研究过类似的问题,但无法使其适用于我的情况
Importing .proto files from another project
答案 0 :(得分:1)
好的,我终于解决了这个问题。 @DazWilkin也指出了这一点。
import
中使用相对路径,因此应使用项目的绝对路径。以我为例:import "Common/common.proto"
ProtoRoot="..\Protos\Common\"
代替ProtoRoot="../Protos/"
"..\Protos\
<Protobuf Include="Common/common.proto" ProtoRoot="../Protos/" />
<Protobuf Include="Vehicle/car.proto" ProtoRoot="../Protos/" />
答案 1 :(得分:0)
或者,还有另外两种方法可以为 protoc
指定包含目录。
首先,有一个名为 Protobuf_AdditionalImportsPath
的全局属性。如果您在 .csproj
/.fsproj
中指定此属性,它将被传递给该项目中的每个 protoc
的 .proto
。你可以这样使用它:
<PropertyGroup>
<Protobuf_AdditionalImportsPath>../../my/other/directory</Protobuf_AdditionalImportsPath>
</PropertyGroup>
还有一个 AdditionalImportDirs
属性,您可以直接在 <Protobuf>
元素上指定。这可能仅对您指定的 .proto
有效:
<Protobuf Include="MyProto.proto" Link="MyProto.proto" AdditionalImportDirs="../../my/other/directory" />
请记住,在这两种情况下,您都可以指定任何您想要的目录,无论它是否是您正在编译的 .proto
的父目录。
另请记住,您在 .proto
中指定的导入路径需要与您指定的导入目录之一相关。