2015-08-17 3 views
9

В нашем проекте мы успешно используем Google Protobuf для C++. Теперь необходимо скомпилировать тот же * .proto-файл, чтобы использовать его в коде C#. Я загрузил последние Protobuf version 3.0.0-alpha-3. Он обеспечивает поддержку формата proto2 для C#, которого достаточно для меня. Я могу успешно скомпилировать файл * .proto и получить файл * .cs. Тем не менее, когда я добавить получившийся * .cs файл в мой проект C# и попытаться построить, я получаю ошибки компилятора, подобные этим: "The type or namespace name 'Google' could not be found in the global namespace (are you missing an assembly reference?)" Это место, где происходит ошибка:Сборки Google Protobuf 3.0.0 для C#

// Generated by the protocol buffer compiler. DO NOT EDIT! 
// source: DiagramExport.proto 
#pragma warning disable 1591, 0612, 3021 
#region Designer generated code 

using pb = global::Google.ProtocolBuffers; 
using pbc = global::Google.ProtocolBuffers.Collections; 
using pbd = global::Google.ProtocolBuffers.Descriptors; 

Теперь я не нахожу любой DLL и т. д. в ZIP-архиве, доступном на странице проекта, который я мог бы включить в качестве ссылки в свой проект C#. Только protoc.exe и некоторые файлы * .proto. Мой простой вопрос: Где я могу получить эти сборки?

(Примечание: Я пытался построить проект protobuf-csharp-3.0.0-alpha-3 из источников, следуя инструкции в файле README, но не смог построить его с Visual Studio 2013 Update 4 «из коробки», я получаю много ошибок компилятора .)

+0

Я не знаю, что это за библиотека, которую вы пытаетесь использовать, но я бы начал с [protobuf.net] (https://code.google.com/p/protobuf-net/). – Sinatr

+0

@Sinatr Как я понимаю, я пытаюсь использовать «официальное» распространение Google. По крайней мере, документация на сайте Google указывает на этот проект (см. Https://developers.google.com/protocol-buffers/). Я не хочу использовать protobuf.net, потому что мы уже использовали protoc.exe для компиляции нашего * .proto для C++ и Java. – Vivit

+0

Google не имеет ничего общего с .Net. Поэтому кто-то должен выполнить * грязную работу * портирования либо оболочки в библиотеку C++, либо исходного кода на C#. Я не вижу 'C#' на связанной странице. Просто используйте protobuf.net из своего кода на C#. – Sinatr

ответ

6

После прочтения this и this документации, я обнаружил, что есть возможность установить пакет протокола Буферы NuGet для моего проекта, выполнив следующую команду в Package Manager Console:

Install-Package Google.ProtocolBuffers 

на консоль это ccessible в Visual Studio 2013 через TOOLS -> NuGet Package Manager -> Менеджер пакетов. Менеджер загрузил пакет, и я получил две ссылки «Google.ProtocolBuffers» и «Google.ProtocolBuffers.Serialization» в моем проекте, которые сделали компилятор счастливым. Теперь он отлично работает!

+3

FYI, небольшое обновление: буферы протокола Google C# 3.0.0-beta2 также доступны 'Install-Package Google.Protobuf -Pre' – GraehamF

3

Взгляни на освобождении отмечает here

Под C# (бета-версия) раздела вы найдете:

Breaking: Preconditions is renamed to ProtoPreconditions 
Breaking: GeneratedCodeInfo is renamed to GeneratedClrTypeInfo 

Так кажется protoc.exe, которые приходят с Grpc.Tools пакетом генерировать «старым "код. Я заменил это protoc.exe на this и перекомпилировал (восстановил) мои классы, которые исправили проблему.

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