2016-03-17 36 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