一般使用Protobuf的步驟爲linux
.proto
文件protoc
生成對應語言的代碼以生成C#代碼爲例,使用以下命令:shell
protoc -I ../protos --csharp_out ../Generated --grpc_out ../Generated \ --plugin=protoc-gen-grpc=grpc_csharp_plugin ../protos/ExportOffice.proto
其生成的C#代碼像這樣:bash
public const int TemplatePathFieldNumber = 1; private string templatePath_ = ""; [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public string TemplatePath { get { return templatePath_; } set { templatePath_ = pb::ProtoPreconditions.CheckNotNull(value, value") } }
C#開發一般使用Pascal、Camel二種命名規範工具
上面代碼中成員變量 templatePath_
應該是 Camel
命名規則,但 Camel
命名規則沒有以_結尾的。code
個人項目中爲規範化代碼我使用了 StyleCop
自動代碼審查工具,它會將不符合命名規範的代碼視爲編譯錯誤,這種命名的代碼是編譯不過的,而且 StyleCop
並無提供忽略指定類文件的功能,只能改代碼使其符合命名規範了。事件
代碼是自動生成的手動確定確定不現實的,那麼就自動改。能夠用正匹配到這種命名的變量而後替換便可,因而我寫了個shell腳本能夠作這件事,代碼以下:ip
#!/usr/bin/env bash #Usage: xxx.sh TOOLS_DIR=/mnt/d/Program_Code/Package/gRPC/Tools/linux_x64 BASH_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $BASH_DIR rm ../Generated/*.cs $TOOLS_DIR/protoc -I ../protos --csharp_out ../Generated --grpc_out ../Generated \ --plugin=protoc-gen-grpc=$TOOLS_DIR/grpc_csharp_plugin ../protos/ExportOffice.proto sed -ri -e 's/\b([a-zA-Z0-9_]+)_\b/_\1/g' \ -e 's/\b(descriptor)\b/_\1/g' \ -e '1s/^/\xef\xbb\xbf/' ../Generated/*.cs
這個腳本作了3件事開發
使用時須要將 TOOLS_DIR
變量修改成 protoc
所在目錄rpc