我有一个 dotnet core gRPC 项目,我正在尝试在我的 proto 文件中包含路由注释,如下所示:
import "google/api/annotations.proto";
文件结构是这样的(因为我将googleapis
存储库作为 git 子模块导入):
protos/
myproto.proto
googleapis/
google/
api/
annotations.proto
...
在 go 项目中,它可以通过以下方式完成:
protoc -I . -I ./googleapis --go_out=plugins=grpc:. *.proto
where-I ./googleapis
为编译器提供了可以找到annotations.proto
文件及其依赖项的目录。
但是,当我在使用如下配置的 dotnet grpc 项目中使用 MSBuild 时,我无法弄清楚如何包含自定义目录。
<ItemGroup>
<Protobuf Include="protos/*.proto" GrpcServices="Server" />
</ItemGroup>
官方文档提到了自定义目标构建的替代方法,以便我可以使用protoc
:
protoc --plugin=protoc-gen-grpc=$(gRPC_PluginFullPath) -I $(Protobuf_StandardImportsPath) ...
但是上面的命令忽略了服务定义并且不会生成这里提到的服务器存根代码,而 MSBuild 会生成。
我发现但不理想的解决方法:
我意识到Grpc.Tools
dotnet 包分发了一些常用的 proto 文件,所以我annotations.proto
在那里复制了它的依赖项(在 macOS 中)并且它起作用了:
`~\.nuget\packages\grpc.tools\2.25.0\build\native\include`
更新:
另一种解决方法:
默认情况下包含项目根目录,因此将其用作基本路径并在那里复制导入的 proto 文件也可以(更好但仍然不理想)。
任何想法如何通过 MSBuild 包含上述自定义目录?