2016-03-17 38 views
2

我已經安裝了節儉的定義;使用的NuGet「TProtocol」不包含「IncrementRecursionDepth」兩個我的圖書館和服務器

我有,我已經使用以下命令編譯這是一個非常簡單的節儉文件:

thrift.exe -r --gen csharp node.thrift

的node.thrift有三條線:

service Server { 
    string ping() 
} 

我得到從Server.cs誤差由節儉編譯器產生。

「TProtocol」不包含「IncrementRecursionDepth」

樣品線引發錯誤的定義:

public void Read (TProtocol iprot) 
    { 
     iprot.IncrementRecursionDepth(); //this line has the error 

我GOOGLE了它,但沒有找到任何結果。

更新:如果我刪除了引發錯誤的行,庫編譯和服務器按預期工作,我不知道我將來是否會面臨錯誤,這與遞歸有什麼關係? !

重要的一點:我從http://www.apache.org/dyn/closer.cgi?path=/thrift/0.9.3/thrift-0.9.3.exe編譯使用我已經下載的可執行文件節儉。該版本是0.9.3 通過的NuGet安裝節儉庫0.9.1.3

回答

5

the version is 0.9.3 but the thrift library installed by NuGet is 0.9.1.3

那正是問題。該IncrementRecursionDepth()功能已被後來添加,以防止問題,這是更詳細地概述THRIFT-3235。既然你需要編譯器和庫,你就會遇到問題。

解決方案:始終使用匹配的編譯器和庫。特別是使用0.9.3。

+0

我找不到0.9.3的NuGet包,有沒有辦法讓我自己(使用簡單的嚮導)? –

+1

所有[官方軟件包在這裏列出](https://thrift.apache.org/lib/),加上一些第三方的。 [這是C#的0.9.3](https://www.nuget.org/packages/ApacheThrift/0.9.3)。如果Thrift編譯器在該軟件包中丟失(我不確定,但是IIRC有一些EXE缺失的問題),您可以[https://thrift.apache.org/download]。 – JensG

+1

我搜索了錯誤的軟件包,請將其包含在您的回答中: 要從NuGet安裝最新的官方軟件包,請搜索ApacheThrift。 –

1

問題是編譯器的版本不等於通過的NuGet安裝節儉版本。

要安裝NuGet的最新官方包裝,請搜索ApacheThrift