我正在使用 dotnet standard 2.0 (Visual Studio 2017) 进行 gRPC。这就是我的整个项目的样子:
消息.proto
syntax = "proto3";
package Messages;
message IdRequest{
int32 id = 1;
}
message NameResponse{
string name=1;
}
名称.proto
syntax = "proto3";
package Services;
import public "proto/messages.proto";
service NameService{
rpc GetNameById(Messages.IdRequest) returns (Messages.NameResponse);
}
公共项目
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Remove="proto\messages.proto" />
<None Remove="proto\name.proto" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.10.1" />
<PackageReference Include="Grpc" Version="2.24.0" />
<PackageReference Include="Grpc.Core" Version="2.24.0" />
<PackageReference Include="Grpc.Tools" Version="2.24.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Protobuf Include="proto\messages.proto" />
<Protobuf Include="proto\name.proto" />
</ItemGroup>
</Project>
该项目构建成功,但最终的 Common.dll 没有 Messages 命名空间,我无法真正引用 IdRequest 或 NameResponse。
那么我在哪里犯了隐藏消息命名空间的错误呢?
在项目文件的 Protobuf 标签中,您需要添加 GrpcServices 属性,否则不会创建任何代码:
<ItemGroup>
<Protobuf Include="proto\messages.proto" GrpcServices="Server" />
<Protobuf Include="proto\name.proto" GrpcServices="Server" />
</ItemGroup>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)