.proto轉換為.cs解析報錯處理

2020-10-15 13:00:33

Protobuf 之 .proto轉換為.cs檔案解析報錯處理方法

網上Protobuf 轉換.cs的部落格有很多,本文主要列舉一下轉換過程中可能出現的問題及報錯的解決方法。

一、正常轉換方法

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檔案。

解決方案

  1. cd 進入檔案內部再開始解析,如下圖:
    在這裡插入圖片描述

  2. 嘗試使用如下命令列(未親測,不知道行不行):

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版本。根據提示下載相應版本的解析工具就行。
在這裡插入圖片描述

.