VS 2019中如何在非grpc服务项目中添加proto文件
How to add proto file in a non-grpc service project in VS 2019
在 grpc 服务项目中,当我添加一个新的 item/file 时,我可以 select 文件类型为“Protocol Buffer File”和“Build Action”(在文件 属性) 是“Protobuf 编译器”
但是当我有一个非grpc服务项目(比如class lib)时,当我添加一个新文件时,没有我可以选择的“Protocol Buffer File”类型。即使我使用 .proto ext 创建文件,在“构建操作”中也没有“Protobuf 编译器”我可以 select.
有什么方法可以在非 grpc 服务项目中添加 proto 文件,或者我只能手动编辑项目 .csproj(我的意思是从 grpc 复制关于 proto 文件的 xml 节点服务项目到非grpc服务项目)?
你想做的都有可能。
您提到的“Protobuf 编译器”选项来自 Grpc.Tools Nuget Package, which uses the protobuf compiler protoc to generate C# code. When you build a project and you want to generate code-behind files from the protobuf files during the build, you either need this package or a metapackage like Grpc.AspNetCore,它在项目中引用了它。如果您设置了“Protobuf 编译器”选项,则在构建协议期间构建 code-behind 文件。就像你说的,在默认的“ASP.NET 核心 gRPC 服务”项目中你有“Protobuf 编译器”选项,那是因为它有 Grpc.AspNetCore nuget 包默认安装。
所以,简而言之,您要做的是:1. 在您想要“Protobuf 编译器”选项的项目中添加必要的 nuget 包,以及 2. 如果协议文件与要在其中生成 C# 代码的项目,必须添加项目引用
1.安装所需的 Nuget 包
在任何你想从 protoc 文件创建 code-behind c# 文件的项目中(并且有 protoc 文件的“Protobuf 编译器”选项),你应该安装以下 nuget 包:
Grpc.Tools
Google.Protobuf
或像 Grpc.AspNetCore 这样引用它们的包。通过添加这些包,您将拥有所有原型文件的“Protobuf 编译器”选项,即使它们是从不同的项目引用的,例如共享 class 库。
2。为原型文件添加项目引用
如果您有一个项目,您希望在其中为 proto 文件创建 code-behind 文件,但 *.proto 文件位于不同的项目中,则必须添加引用。例如,如果在名为 Protos 的命名空间中有一个 connections.proto 文件,在名为 [=] 的共享 class 库中33=]Shared,而我想在一个名为Client的客户端项目中使用生成的代码,我必须在客户端项目中安装上面提到的nuget包,添加共享 class 库的客户端项目中的项目引用,并在 Client.csproj:
中添加以下内容
<ItemGroup>
<Protobuf Include="..\Shared\Protos\connections.proto" GrpcServices="Client">
<Link>Protos\connections.proto</Link>
</Protobuf>
</ItemGroup>
现在有客户端项目中引用的connections.proto文件和它的“Protobuf编译器”选项,但文件本身位于不同的项目中(共享 class 库)。
在 grpc 服务项目中,当我添加一个新的 item/file 时,我可以 select 文件类型为“Protocol Buffer File”和“Build Action”(在文件 属性) 是“Protobuf 编译器”
但是当我有一个非grpc服务项目(比如class lib)时,当我添加一个新文件时,没有我可以选择的“Protocol Buffer File”类型。即使我使用 .proto ext 创建文件,在“构建操作”中也没有“Protobuf 编译器”我可以 select.
有什么方法可以在非 grpc 服务项目中添加 proto 文件,或者我只能手动编辑项目 .csproj(我的意思是从 grpc 复制关于 proto 文件的 xml 节点服务项目到非grpc服务项目)?
你想做的都有可能。
您提到的“Protobuf 编译器”选项来自 Grpc.Tools Nuget Package, which uses the protobuf compiler protoc to generate C# code. When you build a project and you want to generate code-behind files from the protobuf files during the build, you either need this package or a metapackage like Grpc.AspNetCore,它在项目中引用了它。如果您设置了“Protobuf 编译器”选项,则在构建协议期间构建 code-behind 文件。就像你说的,在默认的“ASP.NET 核心 gRPC 服务”项目中你有“Protobuf 编译器”选项,那是因为它有 Grpc.AspNetCore nuget 包默认安装。
所以,简而言之,您要做的是:1. 在您想要“Protobuf 编译器”选项的项目中添加必要的 nuget 包,以及 2. 如果协议文件与要在其中生成 C# 代码的项目,必须添加项目引用
1.安装所需的 Nuget 包
在任何你想从 protoc 文件创建 code-behind c# 文件的项目中(并且有 protoc 文件的“Protobuf 编译器”选项),你应该安装以下 nuget 包:
Grpc.Tools
Google.Protobuf
或像 Grpc.AspNetCore 这样引用它们的包。通过添加这些包,您将拥有所有原型文件的“Protobuf 编译器”选项,即使它们是从不同的项目引用的,例如共享 class 库。
2。为原型文件添加项目引用
如果您有一个项目,您希望在其中为 proto 文件创建 code-behind 文件,但 *.proto 文件位于不同的项目中,则必须添加引用。例如,如果在名为 Protos 的命名空间中有一个 connections.proto 文件,在名为 [=] 的共享 class 库中33=]Shared,而我想在一个名为Client的客户端项目中使用生成的代码,我必须在客户端项目中安装上面提到的nuget包,添加共享 class 库的客户端项目中的项目引用,并在 Client.csproj:
中添加以下内容<ItemGroup>
<Protobuf Include="..\Shared\Protos\connections.proto" GrpcServices="Client">
<Link>Protos\connections.proto</Link>
</Protobuf>
</ItemGroup>
现在有客户端项目中引用的connections.proto文件和它的“Protobuf编译器”选项,但文件本身位于不同的项目中(共享 class 库)。