在VS 2017的预构建事件中使用协议从.proto文件生成C#文件

时间:2019-10-03 14:29:22

标签: c# visual-studio .net-core protocol-buffers

在Visual Studio 2017的预构建事件中,我尝试使用protoc中的google.protobuf.tools nuget包中的protoc -I=$(ProjectDir)Messages --csharp_out=$(ProjectDir)Messages $(ProjectDir)*.proto 从.proto文件中生成c#文件,以用于特定文件夹中的所有.proto文件。我用.proto文件创建了.net核心库项目。

为此的预构建事件命令行

protoc

其中 error MSB3073: The command "protoc -I=C:\Projects\TecAlliance.Core.Messages\TecAlliance.Core.Messages\Messages --csharp_out=C:\Projects\TecAlliance.Core.Messages\TecAlliance.Core.Messages\Messages C:\Projects\TecAlliance.Core.Messages\TecAlliance.Core.Messages\GpsCoodinates.proto" exited with code 9009. 1>Done building project "TecAlliance.Core.Messages.csproj" -- FAILED. protoc.exe

的预编译版本的环境变量

但是我出错了

AllowOverride None

我该如何解决?

1 个答案:

答案 0 :(得分:0)

这些链接很有帮助:

NugetPackageRoot

MSBuild Prebuild

我要使用的Pre-build命令:

$(NugetPackageRoot)google.protobuf.tools\3.13.0\tools\windows_x64\protoc.exe -I=$(ProjectDir)protos --csharp_out=$(ProjectDir)Messages $(ProjectDir)protos\*.proto

我没有手动安装协议。此命令使用的是Nuget软件包google.protobuf.tools随附的命令。

我的项目结构如下:

-项目目录

----消息目录

------ myMessages.cs

---- protos目录

------ myMessages.proto

要回答特定问题:

我收到了同样的错误,这意味着它找不到“协议”。通过使用上述构建命令,它将能够找到protoc exe。明显的缺点是,如果更新protobuf软件包,则还需要更新MSBuild命令中的版本。也许有人知道一种自动化的方法?