簡體   English   中英

從不同目錄導入 proto 文件

[英]Importing proto files from different directories

我正在努力為 grpc 導入編寫正確的配置。

所以 .net 解決方案結構如下:
\Protos\Common\common.proto
\Protos\車輛\car.proto
\汽車微服務

在 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?

注意:我已經看過類似的問題,但無法使其適用於我的案例
從另一個項目導入.proto文件

好的,我終於解決了這個問題。 @DazWilkin 也指出了這一點。

  1. 您不能在import中使用相對路徑,因此您應該使用項目的絕對路徑。 在我的例子中是: import "Common/common.proto"
  2. 使用項目根目錄作為 proto 文件的位置。 因此,而不是ProtoRoot="..\Protos\Common\"使用ProtoRoot="../Protos/"
    現在到了有趣的部分。
    出於某種原因,當我使用 ProtoRoot 路徑的反斜杠作為"..\Protos\
    我收到“找不到文件”的錯誤。 所以不要對路徑使用反斜杠。 CarMicroservice.csproj 中的最終代碼如下所示:
<Protobuf Include="Common/common.proto" ProtoRoot="../Protos/" />
<Protobuf Include="Vehicle/car.proto" ProtoRoot="../Protos/" />

或者,還有其他兩種方法可以為protoc指定包含目錄。

首先,有一個名為Protobuf_AdditionalImportsPath的全局屬性。 如果您在.csproj / .fsproj中指定此屬性,它將傳遞給該項目中每個.protoprotoc 你可以像這樣使用它:

<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中指定的導入路徑需要相對於您指定的導入目錄之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM