首页 > 解决方案 > 从不同目录导入 proto 文件

问题描述

我正在努力为 grpc 导入编写正确的配置。

所以.net的解决方案结构是这样的:
\Protos\Common\common.proto
\Protos\Vehicle\car.proto
\CarMicroservice

在 car.proto 里面我有:import "common.proto"

我想要的是生成的 grpc 代码在CarMicroservice 项目中。
在 CarMicroservice.csproj 中,我已经编写了 protos 的路径:

<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

标签: c#visual-studiogrpc

解决方案


好的,我终于解决了这个问题。@DazWilkin 也指出了这一点。

  1. 你不能在 中使用相对路径import,所以你应该使用项目的绝对路径。就我而言,它是:import "Common/common.proto"
  2. 使用项目根目录作为 proto 文件的位置。因此,有趣的部分不是ProtoRoot="..\Protos\Common\"使用ProtoRoot="../Protos/"
    Now 。
    出于某种原因,当我对 ProtoRoot 路径使用反斜杠时,"..\Protos\
    我收到了“找不到文件”的错误。所以不要使用反斜杠作为路径。CarMicroservice.csproj 中的最终代码如下所示:
<Protobuf Include="Common/common.proto" ProtoRoot="../Protos/" />
<Protobuf Include="Vehicle/car.proto" ProtoRoot="../Protos/" />

推荐阅读