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

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

我尝试在 Visual Studio 2017 中的预构建事件中使用 google.protobuf.tools nuget 包中的 protoc 从 .proto 文件生成 C# 文件特别是文件夹。我使用 .proto 文件创建了 .net core 库项目。

为此预构建事件命令行

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

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

但是我得到了错误

 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.

如何解决?

最佳答案

这些链接很有帮助:

NugetPackageRoot

MSBuild Prebuild

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

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

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

我的项目结构如下:

-项目目录

----消息目录

------myMessages.cs

----protos目录

------myMessages.proto

回答具体问题:

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

关于c# - 在 VS 2017 中的预构建事件中使用 protoc 从 .proto 文件生成 c# 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58221315/

相关文章:

css - MailKit 中 HTML 电子邮件正文的字体更改和样式

c# - 与 List 相比,对对象使用 Custom Generic Collection 更快

c# - 缩放 WinForms TableLayoutPanel

c# - 手动添加引用

visual-studio - TFS 无基础合并包含变更集中未更改的文件

sql-server - 无法通过Web API .NET Core连接到SQL Server Docker容器

c# - 签署 .net 核心程序集的正确方法

c# - 从对象和嵌套对象中获取一些属性

c# - 同步访问多个线程可以访问的对象

visual-studio - 将包参数传递给执行包任务