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

Я гугл для него, но не нашел никаких результатов.

обновление: Если удалить строки метательные ошибку, библиотека компилирует и сервер работает как и ожидалось, я не знаю, если я буду сталкиваться с ошибками в будущем или нет, Что с рекурсии? !

важный момент: Я скомпилировать файл бережливость, используя исполняемый файл я скачал из 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

Я не мог найти пакеты NuGet для 0.9.3, есть ли способ сделать это самостоятельно (используя простой мастер)? –

+1

Все [официальные пакеты перечислены здесь] (https://thrift.apache.org/lib/), а также некоторые сторонние. [Это значение 0.9.3 для C#] (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.

Смежные вопросы