Сборки Google Protobuf 3.0.0 для C#
В нашем проекте мы успешно используем Google Protobuf для C++. Теперь необходимо скомпилировать тот же файл *.proto, чтобы использовать его в коде C#. Я скачал последнюю версию Protobuf 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?)"
Это место, где происходит ошибка:
// 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 "из коробки"; я получаю ряд ошибок компилятора.)
2 ответа
Прочитав эту и эту страницу документации, я обнаружил, что есть возможность установить пакет NuGet для буферов протокола для моего проекта, выполнив следующую команду в консоли диспетчера пакетов:
Install-Package Google.ProtocolBuffers
Консоль доступна в Visual Studio 2013 через ИНСТРУМЕНТЫ -> Диспетчер пакетов NuGet -> Консоль диспетчера пакетов. Менеджер скачал пакет, и я получил две ссылки "Google.ProtocolBuffers" и "Google.ProtocolBuffers.Serialization" в моем проекте, которые порадовали компилятор. Теперь работает отлично!
Посмотрите примечания к выпуску здесь
В разделе C# (бета) вы найдете:
Breaking: Preconditions is renamed to ProtoPreconditions
Breaking: GeneratedCodeInfo is renamed to GeneratedClrTypeInfo
Так что кажется protoc.exe
которые идут с Grpc.Tools
Пакет генерирует "старый" код. Я заменил это protoc.exe
с этим и перекомпилировал (восстановил) мои классы, которые устранили проблему.