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版本,根據提示下載相應版本的決議工具就行,

.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/173315.html
標籤:java
