Bek*_*uma 9 c# visual-studio grpc
我正在努力为 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\" />
Run Code Online (Sandbox Code Playgroud)
但出现错误:“common.proto”没有这样的文件或目录
问题是:如何在 car.proto 中正确导入 common.proto?
注意:我已经研究过类似的问题,但无法使其适用于我的案例
从另一个项目导入 .proto 文件
Bek*_*uma 11
好吧,我终于解决了这个问题。@DazWilkin 也指出了这一点。
import,因此您应该使用项目的绝对路径。就我而言,是:import "Common/common.proto"ProtoRoot="..\Protos\Common\"使用。
由于某种原因,当我在 ProtoRoot 路径中使用反斜杠时,
我收到了“文件未找到”错误。因此不要使用反斜杠作为路径。CarMicroservice.csproj中的最终代码如下:ProtoRoot="../Protos/" "..\Protos\ <Protobuf Include="Common/common.proto" ProtoRoot="../Protos/" />
<Protobuf Include="Vehicle/car.proto" ProtoRoot="../Protos/" />
Run Code Online (Sandbox Code Playgroud)
或者,还有另外两种方法来指定protoc.
首先,有一个名为 的全局属性Protobuf_AdditionalImportsPath。.csproj如果您在/中指定此属性.fsproj,它将传递给该项目中的protoc每个属性.proto。你可以这样使用它:
<PropertyGroup>
<Protobuf_AdditionalImportsPath>../../my/other/directory</Protobuf_AdditionalImportsPath>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
AdditionalImportDirs您还可以直接在元素上指定一个属性<Protobuf>。这可能只对.proto您指定的 s 有效:
<Protobuf Include="MyProto.proto" Link="MyProto.proto" AdditionalImportDirs="../../my/other/directory" />
Run Code Online (Sandbox Code Playgroud)
请记住,在这两种情况下,您都可以指定所需的任何目录,无论它是否是.proto您正在编译的目录的父目录。
另请记住,您在.proto需求中指定的导入路径相对于您指定的导入目录之一。
| 归档时间: |
|
| 查看次数: |
9217 次 |
| 最近记录: |