.net 如何使用Grpc在aspnetcore项目中导入google.type.money类型?

disho6za  于 2023-01-03  发布在  .NET
关注(0)|答案(1)|浏览(164)

我有一个使用Grpc的aspnetcore应用程序,目前可以很好地处理只包含字符串的简单消息。
我需要添加一个新的消息,将包含金钱的价值观,我看到有一个money.proto类型可通过导入google/protobuf.然而,当我试图导入它,我得到了一个错误.
我在我的proto文件中添加了以下内容:

import "google/protobuf/money.proto";

我期望在构建期间生成Grpc Money类型,并成功完成。
但是,构建失败,并出现以下错误:

Import "google/protobuf/money.proto" was not found or had errors.
"google.protobuf.Money" is not defined

我发现之前问过的this问题,答案是在ReSharper中禁用protobuf支持,但是当我选中这个设置时,默认情况下这个框已经取消选中了,如下所示:

This的后续评论指出,这些proto文件可以在Grpc.tools nuget包中找到,我已经将其安装在我的项目中:

类似问题的答案相同。
我可以在github here上找到这个文件,并使用它来确认大小写是否正确(import语句小写m,type usage大写M).我注意到这个文件的包是'google/type'而不是'google/protobuf',所以我尝试更改我的import语句和用法来匹配,但它对问题没有影响,同样的错误。
我检查了here,看看是否有任何文档说明如何让它工作,他们所要说的是:

如果我没有阅读错的话,这意味着如果我有一个工作的Grpc设置,那么我应该有这个可用。
最后,我发现this文章建议这些文件必须手动复制/粘贴到您的项目中,但这似乎相当原始?肯定有一种方法可以通过nuget或其他方式自动拉入这些文件吗?
我一直无法找到任何进一步的指导这一主题。任何帮助将不胜感激。

cwdobuhd

cwdobuhd1#

我很抱歉我花了这么长时间才得到更新,但我相信我已经得到了所有排序了。
tl;dr是我需要执行以下操作来修复问题:
1.在服务器和客户端中安装Grpc.AspNetCore nuget包。
1.添加googleapis repo作为git子模块。
1.在客户端和服务器项目文件中添加项元素。
1.将AdditionalImportDirs属性添加到“my”原型文件的item元素中,以便它可以导入money原型文件。
服务器csproj:

<ItemGroup>
    <Protobuf Include="Proto\example.proto" GrpcServices="Server" AdditionalImportDirs="..\..\BuildingBlocks\googleapis" />
    <Protobuf Include="..\..\BuildingBlocks\googleapis\google\type\money.proto" />
</ItemGroup>

客户csproj:

<ItemGroup>
    <Protobuf Include="../GrpcExample.Server/Proto/example.proto" GrpcServices="Client" AdditionalImportDirs="..\..\BuildingBlocks\googleapis" />
    <Protobuf Include="..\..\BuildingBlocks\googleapis\google\type\money.proto" />
</ItemGroup>

我已经创建了一个github repo,其中包含一个示例客户端/服务器项目,展示了如何设置所有这些项目的工作代码,以及一个README,指导您逐步完成如何从2个Web API项目到通过gRPC工作的Money。
example-grpc-aspnetcore

相关问题