在 VS 2017 中的预构建事件中使用 protoc 从 .proto 文件生成 c# 文件



我尝试使用google.protobuf.toolsnuget 包中的protoc在 Visual Studio 2017 中的预构建事件中为特定文件夹中的所有 .proto 文件生成 c# 文件。我用 .proto 文件创建了 .net 核心库项目。

为此预构建事件命令行

protoc -I=$(ProjectDir)Messages --csharp_out=$(ProjectDir)Messages $(ProjectDir)*.proto

其中protocprotoc预编译版本的环境变量.exe

但是我有错误

error MSB3073: The command "protoc -I=C:ProjectsTecAlliance.Core.MessagesTecAlliance.Core.MessagesMessages --csharp_out=C:ProjectsTecAlliance.Core.MessagesTecAlliance.Core.MessagesMessages C:ProjectsTecAlliance.Core.MessagesTecAlliance.Core.MessagesGpsCoodinates.proto" exited with code 9009.
1>Done building project "TecAlliance.Core.Messages.csproj" -- FAILED.

我该如何解决?

这些链接很有帮助:

NugetPackageRoot

MSBuild 预生成

我开始工作的预构建命令:

$(NugetPackageRoot)google.protobuf.tools3.13.0toolswindows_x64protoc.exe -I=$(ProjectDir)protos --csharp_out=$(ProjectDir)Messages $(ProjectDir)protos*.proto

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

我的项目结构如下:

-项目目录

----消息目录

------我的消息.cs

----原型目录

------myMessages.proto

要回答具体问题:

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

最新更新