使用MSBuild构建gRPC dotnet核心项目时如何包括自定义目录

奥斯卡奖

我有一个dotnet核心gRPC项目,并且尝试在我的原型文件中包含路由注释,如下所示:

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为编译器提供了dir,可以在其中找到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.Toolsdotnet软件包分发了一些常用的原始文件,因此我annotations.proto在macOS中复制了它的依赖项并在其中工作:

`~\.nuget\packages\grpc.tools\2.25.0\build\native\include`

更新:

另一个解决方法:

默认情况下包括项目根目录,因此将其用作基本路径并在其中复制导入的原始文件也可以(更好,但仍然不理想)。

任何想法如何通过MSBuild包含上述自定义目录?

奥斯卡奖

终于想通了。正如Jan Tattermusch所建议的那样,ProtoRoot指定将从中查找msbuildInclude属性以及protoimport关键字的目录,而其工作方式与ProtoRoot工作方式Include不同import因此,为了像这样自定义原始文件结构,ProtoRoot必须包含所有不同的路径,这些路径应为:

<Protobuf Include="protos/*.proto" ProtoRoot="./protos; ./protos/googleapis" ... />

更新内容

对于v2.31.0之前的grpc-dotnet版本,上述工作正常。对于较新的版本,将显示警告,指出ProtoRootpath不是path的前缀Include要解决此问题,请改用以下配置:

<Protobuf Include="protos/*.proto" ProtoRoot="protos" AdditionalImportDirs="protos/googleapis" ... />

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在使用自定义工具链时包括用于 CLion 检查的目录

如何使用 MSBuild 构建多个平台

如何使用MSBuild构建文件

如何使用VS 2015 MSBuild构建.vdproj

使用Msbuild构建ASP核心(ASP 5)项目

如何使用自定义 JDK 构建 Jenkins 项目?

如何使用 dotnet 核心控制台应用程序在控制台上以“设计格式”重现自定义文本?

如何使用MsBuild v15构建C ++项目?

.net核心应用程序的构建/发布中包括自定义文件

如何使用 .bat 文件构建和运行 dotnet 核心项目?

在Linux上使用Mono构建VS 2017 MSBuild csproj项目

使用MSBuild在VS2017中构建SSDT项目失败

使用gRPC Docker容器构建Go时出错

使用jenkins构建时,MSBuild不为nuget PackageReference添加/ reference

使用路由PARAMS DOTNET的核心自定义授权属性

如何使用MSBuild构建Visual Studio 2017 VSIX

MSBuild:使用FAKE构建项目时,如何将警告视为错误?

如何以自定义宽高比统一构建项目?

是否可以从代码中使用MSBuild构建asp.net核心项目?

使用CocoaPods时如何将自定义项目配置添加到Xcode?

使用自定义TableModel和从文件中读取的项目列表时,如何更新jtable

如何使用自定义目录结构构建AndroidManifest.xml

尝试使用MSBuild或Incredibuild进行构建时,Visual Studio 2013的构建时间是原来的4倍

从命令行使用 MSBuild 版本 15 构建 Azure 函数时构建失败

在构建过程后始终执行自定义 MSBuild 任务

使用自定义项目符号时的样式问题

使用 QtCreator 部署自定义构建的项目

如何在MSBuild脚本中使用自定义变量?

从 MSBuild 构建项目到不同的输出目录