定義Protocol Buffers
message.proto
syntax = "proto3";
package Greet;
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings.
message HelloReply {
string message = 1;
}
複製程式碼
greet.proto
syntax = "proto3";
package Greet;
option csharp_namespace = "Greet";
import "message.proto";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
複製程式碼
csharp_namespace這個是針對C#獨有的可選配置,如果namespace與package相同,可以不用寫。
使用protoc手動編譯
protoc.exe可以在以下地址下載:github.com/protocolbuf…
如果使用nuget安裝過Google.Protobuf.Tools,在這個目錄也可以找到protoc.exe %UserProfile%.nuget\packages\Google.Protobuf.Tools\3.7.0\tools\windows_x64\protoc.exe
最簡單的編譯bat可以這樣寫:
protoc --csharp_out=./ greet.proto
複製程式碼
--csharp_out是必選引數, 還有一個-I為可選引數,預設為當前目錄,指定程式碼目錄
如果需要同時編譯服務端和客戶端程式碼,需要grpc_csharp_plugin,可以在Grpc.Tools nuget包中找到: %UserProfile%.nuget\packages\Grpc.Tools\1.20.0\tools\windows_x64\grpc_csharp_plugin.exe
set PLUGIN=%UserProfile%\.nuget\packages\Grpc.Tools\1.20.0\tools\windows_x64\grpc_csharp_plugin.exe
D:\Grpc\protoc-3.7.1-win64\bin\protoc.exe --csharp_out=./ greet.proto --grpc_out ./ --plugin=protoc-gen-grpc=%PLUGIN%
複製程式碼
使用Visual Studio和Grpc.Tools自動編譯
Grpc.Tools在1.17版之後,可以與MSBuild整合,自動根據proto檔案編譯生成C#程式碼。
生成的程式碼可以在obj/Debug/TARGET_FRAMEWORK資料夾中找到。
配置方式:
- 新增Grpc.Tools nuget包
- 在proto檔案的屬性中,將Build Action修改為Protobuf compiler
- Build Action如果設定為Content,Custom Tool設定為MSBuild:Compile也可
注意:如果proto檔案中使用了import匯入其他proto檔案,需要寫入在Visual Studio中的完整路徑,例如:
import "Protos/message.proto"; 複製程式碼