Protobuf 之 .proto转换为.cs文件解析报错处理方法
网上Protobuf 转换.cs的博客有很多,本文主要列举一下转换过程中可能出现的问题及报错的解决方法。
目录
- 一、正常转换方法
-
- 1、准备资源
- 2、命令行转换
- 二、命令行转换报错解决方案
-
- 1、提示路径错误,找不到.proto文件,如下图:
- 2、Unrecognized syntax identifier "proto3". This parser only recognizes "proto2".,
一、正常转换方法
1、准备资源
可以在git上下载最新的protobuf自己解析,我的主页里分享有protobuf-3.13.0版本,
下载地址:
https://download.csdn.net/download/qq_43505432/12922490
下载后的文件如图:
.
或者直接下载解析工具protoGen,下载地址:https://download.csdn.net/download/qq_43505432/12922514
下载后的文件如图:
下面说说用protoGen解析工具怎么转.cs文件。
2、命令行转换
将下载好的文件中的protogen.exe拖拽到doc命令面板上,然后输入 -i: 然后将要转换的.proto文件拖拽到doc面板上 ,然后输入 -o:然后输入要生成文件所在目录以及文件名称
注意:解析路径一定要是英文路径
E:\ProtoBuf\ProtoGen\
是我放解析工具的地址,需要换成自己的地址。
E:\ProtoBuf\ProtoGen\protogen.exe -i:E:\ProtoBuf\ProtoGen\Text.proto -o:E:\ProtoBuf\ProtoGen\Text.cs
或者cd进入文件内部再解析,如下图:
输入命令行回车,若无报错则解析成功,可以看到文件中多了.cs文件。
二、命令行转换报错解决方案
1、提示路径错误,找不到.proto文件,如下图:
报错提示:File does not reside within any path specified using --proto_path (or -I). You must specify a --proto_path which encompasses this file. Note that the proto_path must be an exact prefix of the .proto file names – protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it’s harder than you think).
An error occurred parsing Test.proto
原因:增加了-i 后,protogen不在当前目录寻找proto文件了,所以找不到.proto文件。
解决方案:
-
cd 进入文件内部再开始解析,如下图:
-
尝试使用如下命令行(未亲测,不知道行不行):
protogen --cpp_out=. Test.proto -I../data -I../config -I.
var foo = 'bar';
.
2、Unrecognized syntax identifier “proto3”. This parser only recognizes “proto2”.,
如下图:
报错提示: Unrecognized syntax identifier “proto3”. This parser only recognizes “proto2”.
An error occurred parsing backpack.proto
原因:很明显,你下载的解析工具和要解析的.proto文件不是同一个版本,可以打开.proto文件,查看protobuf版本。根据提示下载相应版本的解析工具就行。
.