2016-07-28 132 views
0

這是我第一次嘗試使用Google協議緩衝區編寫原型。我的文件是這樣的:谷歌協議緩衝區未編譯爲C#

syntax = "proto3"; 
package Clark.EDI.Protos; 

// [START csharp_declaration] 
option csharp_namespace = "Clark.EDI.Protos"; 
// [END csharp_declaration] 

// [START messages] 
message Address { 
    required int32 addressId = 1; 
    optional string namePrimary = 2; 
    optional string nameSecondary = 3; 
    optional string streetPrimary = 4; 
    optional string streetSecondary = 5; 
    optional string city = 6; 
    optional string stateCode = 7; 
    optional string zipCode = 8; 
    optional string countryCode = 9; 
} 
// [END messages] 

我試圖編譯它是這樣的:

protoc --csharp_out = SRC address.proto

即使壽我把它定義爲proto3,它要求必要或可選。

當我包含requiredoptional我收到這些消息,但沒有.cs文件。

address.proto:1:1:解讀非ASCII碼點239. address.proto:1:1:預期頂層聲明(例如, 「信息」)。 address.proto:1:2:解讀非ASCII碼值187 address.proto:1:3:解釋非ASCII碼值191

我缺少什麼或者做錯了嗎?

+1

239很可能是一個unicode字節順序標記,將文件保存爲ansi –

+0

從visual studio?什麼編碼? –

+0

必須/可選在proto3中被刪除 –

回答

0

我認爲你的文本編輯器默默地在你的文件的開頭插入字節順序標記。該錯誤消息意味着該文件中的前三個字節是239 187 191,或EF BB BF,這是UTF-8字節順序標記:

Encoding Hexadecimal Decimal  CP1252 characters 
UTF-8  EF BB BF  239 187 191  

Wikipedia

哪個文本編輯器,您使用的?如果您在Windows上,請嘗試在記事本或記事本++中打開該文件。如果你撥動編碼設置,你應該在文件開頭看到3個意外字符。刪除它們。

+0

我更改了選項以將其保存爲UTF-8而沒有簽名,現在收到消息:'address.proto:1:18:無法識別的語法標識符「proto3」。這個解析器只識別「proto2」。「我從這裏下載了2.6.1:https://developers.google.com/protocol-buffers/docs/downloads –

1

如果您使用的是protoc二進制版本v3,則必需的/可選的關鍵字將被刪除。

因此,刪除需要刪除/可選關鍵字成功後所有必需/可選關鍵字

我使用V3編譯你的信息,它的編譯。

說明: 將您的文件保存爲ANSI或UTF-8,不要保存爲UniCode。

可以安裝V3作爲NuGet包

0

我面臨着同樣的問題,因爲我已經從PDF複製它。在我手工編寫它之後,它就起作用了。