Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core 如何在客户端和服务器之间共享proto文件_.net Core_Grpc - Fatal编程技术网

.net core 如何在客户端和服务器之间共享proto文件

.net core 如何在客户端和服务器之间共享proto文件,.net-core,grpc,.net Core,Grpc,我已经设置了一个Grpc服务,其中包含两个原型文件(一个具有自定义类型,另一个用于服务) 自定义类型.proto syntax=“proto3”; 包装类型; 选项csharp_namespace=“CustomTypes”; //示例:12345.6789->{units=12345,nanos=678900000} 消息小数{ //全部单位为金额的一部分 int64单位=1; //纳米数量单位(10^-9) //必须与单位的符号相同 sfixed32纳米=2; } 普罗托先生 syntax

我已经设置了一个Grpc服务,其中包含两个原型文件(一个具有自定义类型,另一个用于服务)

自定义类型.proto

syntax=“proto3”;
包装类型;
选项csharp_namespace=“CustomTypes”;
//示例:12345.6789->{units=12345,nanos=678900000}
消息小数{
//全部单位为金额的一部分
int64单位=1;
//纳米数量单位(10^-9)
//必须与单位的符号相同
sfixed32纳米=2;
}
普罗托先生

syntax=“proto3”;
选项csharp_namespace=“Test”;
导入“Protos/customtypes.proto”;
包装问候;
//问候服务定义。
迎宾员{
//致意
rpc SayHello(HelloRequest)返回(HelloReply);
}
//包含用户名的请求消息。
信息HelloRequest{
CustomTypes.Decimal值=1;
}
//包含问候语的响应消息。
消息HelloReply{
CustomTypes.Decimal值=1;
}
服务器端项目可以很好地编译,但是当我使用
添加连接的服务
(在visual studio中)将这两个原型文件添加到客户端项目时,它会在我的.csproj文件中生成以下内容


Protos\customtypes.proto
Protos\greet.proto
但是当我试图编译它时,却找不到Decimal自定义类型

1>----构建已启动:项目:客户端,配置:调试任何CPU------
1> Protos/customtypes.proto:错误:找不到文件。
1> ../Server/Protos/greet.proto(4,1):错误:未找到导入“Protos/customtypes.proto”或存在错误。
1> ../Server/Protos/greet.proto(16,3):错误:“CustomTypes.Decimal”未定义。
1> ../Server/Protos/greet.proto(21,3):错误:“CustomTypes.Decimal”未定义。
1> 已完成生成项目“Client.csproj”--失败。
======生成:0成功,1失败,0最新,0跳过==========
我已经设置了一个github项目,其中包含了所需的所有内容


因此,我应该如何设置一个项目来共享proto文件,我能想到的唯一解决方案是创建一个公共项目并生成客户端和服务器类型,但是在客户端项目中包含服务器类型似乎有点浪费

protobuf文件定义了客户端和服务器之间的契约。每个文件都需要protobuf文件,即使只是为了生成存根,以便能够与其他文件交互。将它们视为“服务器类型”而不是允许交互的服务、方法和消息类型是不正确的。出于这个原因,protobuf源(甚至可能是protoc生成的文件)确实代表了共享内容,而且它们可能适合作为一个独特的共享项目。我自己没有将它们添加为链接,是visual studio吗?我可以手动复制文件,但这会迫使我手动保持同步?我不使用Visual Studio,因此无法帮助其行为。客户端和服务器共享协议生成的存根,因此,至少必须共享生成的源。我主要使用Golang,我将protobufs、客户端和服务器包含在一个repo中。我不签入protoc生成的源代码。最好将协议保存在单独的回购协议中。我使用Rust,当我想要生成Rust客户机时,我的protobufs与我的Golang源代码混合在一起很不方便,因为Rust客户机只需要克隆protobufs来生成源代码。