我是靠谱客的博主 自然人生,最近开发中收集的这篇文章主要介绍C# Protocol buffer 批处理工具新版步移工具一工具二代码下载Bat结合两工具项目中使用另一种更优的解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
新版步移
ProtobufGenBatTool V3 更方便、高效
工具一
名称:ProtobufGenBatTool
因项目需要使用到Protocol buffer,所以最近学习了一下protogen.exe生成cs代码的方法
但是发现protogen.exe参数没有设置输出的cs目录,所以重新写了个工具处理,解决这个问题
参数说明
- ProtobufGenBatTool.exe 是我们的批处理工具(相对目录或绝对目录都OK)
- -protoc_file 是指定protoc.exe工具文件的路径(相对目录或绝对目录都OK)
- -protogen_file 是指定protogen.exe工具文件的路径(相对目录或绝对目录都OK)
- -proto_file_inputpath 是指定包含.proto文件的一个或多的目录(相对目录或绝对目录都OK),多个目录以空格来分隔
- -cs_file_outputpath 是指定我们的cs文件的输出目录(相对目录或绝对目录都OK)
另个bat脚本版本的实现
但是bat对字符串处理,还有代码语法、可读性、方便程度、等,都没有高级语言方便
REM description :
generate the .cs files from .proto files
REM author
:
Jave.Lin
REM date
:
2018-03-13
@echo off
setlocal enabledelayedexpansion
REM cs file out put path
set cs_out_path=%~1
if "%cs_out_path%"=="" (
set cs_out_path=cs
)
if "%%cs_out_path:~0,-1%%"==%cs_out_path:~-1%
else (set cs_out_path=!cs_out_path!)
REM protoc file
set protoc_file=protoc.exe
REM protogen file
set protogen_file=protogen.exe
REM proto files
REM set proto_files=ProtoJaveTestData.proto,ProtoMyData.proto
set proto_files=*.proto
echo Generating...
for /R %%s in (!proto_files!) do (
set fileName=%%s
echo handling file : !fileName!
set csFileName=!fileName:~0,-6!.cs
set protobinFileName=!fileName:~0,-6!.protobin
set outputProtobinFileName=!protobinFileName:%~dp0=!
!protoc_file! -I=%~dp0 --descriptor_set_out=!protobinFileName:%~dp0=! --include_imports !fileName!
!protogen_file! !protobinFileName!
)
echo Generation complete!
echo moving cs file...
RD /s /q !cs_out_path!
MD !cs_out_path!
for %%s in (*.cs) do (
set moveToFileName=!cs_out_path!%%s
move %%s !moveToFileName!
)
echo moving cs file complete!
pause
bat脚本执行如图
工具二
名称:ProtobufPIDMapperTools
该工具是方便讲:协议ID与对应的Type一一对应起来
参数说明
- ProtobufPIDMapperTools.exe 是我们的批处理工具(相对目录或绝对目录都OK)
- 参数1 指定包含.proto的文件(相对目录或绝对目录都OK)
- 参数2 指定.cs文件输出的文件路径(相对目录或绝对目录都OK)
- 参数3 指定参数2生成的.cs文件的namespace值
代码下载
https://pan.baidu.com/s/1X4mHlf8duaSIXrhETAgSag
具体代码,大家随便改,随便用吧。
错误方面,欢迎指正。
Bat结合两工具
具体在:解压包后的Usage目录下的:bat.bat
代码
ProtobufGenBatToolProtobufGenBatTool.exe -protoc_file ProtobufToolsprotoc.exe -protogen_file ProtobufToolsProtoGen.exe -proto_file_inputpath protos protos1 -cs_file_outputpath com/net/protobuf/msg -pause_on_complete false
ProtobufPIDMapperToolsProtobufPIDMapperTools.exe com/net/protobuf/msg com/net/protobuf/promap/ProMap.cs com.net.protobuf.promap
执行效果截图
项目中使用
映射协议与TYPE的使用如下:
ProMap就是我们生成的代码
var obj = Activator.CreateInstance(ProMap.getType(1));
obj = Activator.CreateInstance(ProMap.getType(2));
obj = Activator.CreateInstance(ProMap.getType(3));
obj = Activator.CreateInstance(ProMap.getType(4));
obj = Activator.CreateInstance(ProMap.getType(5));
obj = Activator.CreateInstance(ProMap.getType(6));
obj = Activator.CreateInstance(ProMap.getType(7));
obj = Activator.CreateInstance(ProMap.getType(8));
obj = Activator.CreateInstance(ProMap.getType(9));
obj = Activator.CreateInstance(ProMap.getType(10));
另一种更优的解决方案
由于时间关系,所以目前先将就使用protogen.exe生成.cs。
如果时间允许的话,我建议大家可以去学习一下,protoc.exe生成的.protobin文件的数据格式。
然后在自己写一个对.protobin文件的解析、生成.cs文件的工具,将可最大限度的按自己的想法来定制.cs的内容。
最后
以上就是自然人生为你收集整理的C# Protocol buffer 批处理工具新版步移工具一工具二代码下载Bat结合两工具项目中使用另一种更优的解决方案的全部内容,希望文章能够帮你解决C# Protocol buffer 批处理工具新版步移工具一工具二代码下载Bat结合两工具项目中使用另一种更优的解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复