2015-08-17 20 views
9

W naszym projekcie z powodzeniem używamy Google Protobuf dla C++. Teraz istnieje potrzeba skompilowania tego samego pliku * .proto, aby użyć go w kodzie C#. Pobrałem najnowszą wersję Protobuf version 3.0.0-alpha-3. Zapewnia obsługę formatu proto2 dla języka C#, co jest dla mnie wystarczające. Mogę pomyślnie skompilować plik * .proto i uzyskać plik * .cs. Jednak, kiedy dodać wynikowy plik * .cs do mojego projektu C# i starają się budować, otrzymuję błędy kompilatora, takie jak: "The type or namespace name 'Google' could not be found in the global namespace (are you missing an assembly reference?)" Jest to miejsce, w którym błąd się dzieje:Zespoły Google Protobuf 3.0.0 dla 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; 

Teraz nie znajdę dowolną bibliotekę DLL itp. w wersji ZIP dostępnej na stronie projektu, którą mógłbym zamieścić jako referencję w moim projekcie C#. Tylko protoc.exe i jakiś plik * .proto są tam. Moje proste pytanie brzmi: Skąd wziąć te zespoły?

(Uwaga: próbowałem zbudować projekt protobuf-csharp-3.0.0-alpha-3 ze źródeł, postępując zgodnie z instrukcjami w pliku README, ale nie udało się go skompilować z aktualizacją programu Visual Studio 2013 4 "po wyjęciu z pudełka"; otrzymano wiele błędów kompilatora .)

+0

Nie wiem, co to jest biblioteka, której próbujesz użyć, ale zacznę od [protobuf.net] (https://code.google.com/p/protobuf-net/). – Sinatr

+0

@Sinatr Jak rozumiem, staram się używać "oficjalnej" dystrybucji przez Google. Przynajmniej dokumentacja na stronie Google wskazuje na ten projekt (zobacz https://developers.google.com/protocol-buffers/) Nie chcę używać protobuf.net, ponieważ już używamy pliku protoc.exe do kompilacji naszego * .proto dla C++ i Java. – Vivit

+0

Google nie ma nic wspólnego z .Net. Więc ktoś musi wykonać * brudną robotę * przenoszenia do biblioteki C++ albo kodu źródłowego do C#. Nie widzę "C#" na połączonej stronie. Po prostu użyj protobuf.net z twojego kodu C#. – Sinatr

Odpowiedz

6

Po przeczytaniu this i this strona dokumentacji odkryłem, że istnieje możliwość, aby zainstalować pakiet protokołu Zderzaki Nuget dla mojego projektu, wykonując następujące polecenia w konsoli Menedżer pakietów:

Install-Package Google.ProtocolBuffers 

Konsola jest ccessible w Visual Studio 2013 za pośrednictwem TOOLS -> NuGet Package Manager -> Konsola programu Package Manager. Menedżer pobrał pakiet i otrzymałem dwa odnośniki "Google.ProtocolBuffers" i "Google.ProtocolBuffers.Serialization" w moim projekcie, które uszczęśliwiły kompilator. Teraz działa idealnie!

+3

FYI, mała aktualizacja: bufory protokołów Google C# 3.0.0-beta2 są również dostępne 'Install-Package Google.Protobuf -Pre' – GraehamF

3

przyjrzeć się o wydaniu here

Pod C# (Beta) dziale znajdziesz:

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

Więc wydaje się, że protoc.exe które pochodzą z pakietu Grpc.Tools generować „stary " kod. Wymieniłem ten protoc.exe z this i zrekompilowałem (zregenerowałem) moje klasy, które naprawiły problem.