Компилировать протокол буфера 3 типа отметки времени в C# visual studio?

Visual Studio 2015 
C#
NuGet Packages : 
Google.Protobuf v3.0.0 
Google.Protobuf.Tools v3.0.0

MessageType Quake

syntax = "proto3";
import "google/protobuf/timestamp.proto";
message Quake {
  google.protobuf.Timestamp _timestamp = 1;
  double magnitude = 2;
}

timestamp.proto включены в ту же папку

protoc 3.0.2 компиляция из командной строки выполнена успешно

Но VS щелкнуть правой кнопкой мыши по файлу Proto и выбрать "Запустить пользовательский инструмент", произошел сбой с ошибкой "Произошел сбой пользовательского инструмента ProtoBufTool"

генерировать классы C# из Visual Studio?

3 ответа

Документация Protobuf кажется короткой (слабой), когда она объясняет, как выполнить protoc.exe. Вот как я делаю это в небольшом тестовом проекте, который я пишу. Я установил ДВА пакета NuGet для моего проекта Protobuf:

Google.Protobuf (C# runtime library for Protocol Buffers)
Google.Protobuf.Tools (protoc.exe)

В Visual Studio я определил командную строку события Pre-build. Это определяется в меню свойств проекта:

..\..\..\packages\Google.Protobuf.Tools.3.6.0\tools\windows_x64\protoc -I="$(ProjectDir)."
    --csharp_out=$(ProjectDir)Model $(ProjectDir)MyOwn.proto

Полученный файл MyOwn.cs попадает в подкаталог "Model". Он должен быть вручную включен в проект, чтобы автоматически компилироваться. Вот как я это делаю сегодня. Я надеюсь, что это помогает кому-то.

Импортируйте метку времени и используйте полное пространство имен:

syntax = "proto3";
import "google/protobuf/timestamp.proto";

message Quake {
  google.protobuf.Timestamp _timestamp = 1;
  double magnitude = 2;
}

Чтобы создать код C#, см. Их руководство: https://developers.google.com/protocol-buffers/docs/csharptutorial.

Мне удалось заставить его работать с Visual Studio 2019, выполнив

      <ItemGroup>
  <PackageReference Include="Google.Protobuf" Version="3.10.1" />
  <PackageReference Include="Google.Protobuf.Tools" Version="3.10.1" GeneratePathProperty="true" />
</ItemGroup>

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="$(PkgGoogle_Protobuf_Tools)\tools\windows_x64\protoc -I=$(PkgGoogle_Protobuf_Tools)\tools -I=$(ProjectDir)resources\proto --csharp_out=$(ProjectDir) $(ProjectDir)resources\proto\*.proto" />
</Target>

GeneratePathProperty— это новое свойство, которое предоставляет вам каталог пакета NuGet. Оттуда вы можете использоватьPreBuildпостроить буферы протокола, используяprotocи любой из хорошо известных типов Google.

Другие вопросы по тегам