kzf*_*fid 4 c# protocol-buffers visual-studio-2019
在 grpc 服务项目中,当我添加新项目/文件时,我可以选择文件类型为“协议缓冲区文件”,“构建操作”(在文件属性中)为“Protobuf 编译器”
但是,当我有一个非 grpc 服务项目(例如类库)时,在添加新文件时没有可以选择的“协议缓冲区文件”类型。即使我使用 .proto ext 创建文件,“构建操作”中也没有我可以选择的“Protobuf 编译器”。
有什么方法可以在非 grpc 服务项目中添加 proto 文件,或者我只能手动编辑项目 .csproj (我的意思是将有关 proto 文件的 xml 节点从 grpc 服务项目复制到非 grpc 服务项目)?
你想做的事情是可能的。
您提到的“Protobuf 编译器”选项来自Grpc.Tools Nuget Package,它使用protobuf 编译器 protoc生成 C# 代码。当您构建项目并希望在构建期间从 protobuf 文件生成代码隐藏文件时,您要么需要此包,要么需要像Grpc.AspNetCore这样的元包,它在项目中保存对其的引用。在构建过程中,如果您设置了“Protobuf 编译器”选项,protoc 就会构建代码隐藏文件。就像你说的,在默认的“ASP.NET Core gRPC Service”项目中,你有“Protobuf编译器”选项,那是因为它默认安装了Grpc.AspNetCore nuget包。编辑:正如 kzfid 提到的,需要包Google.Protobuf来编译由 protoc 生成的 C# 代码。
因此,简而言之,您需要做的是: 1. 在您想要“Protobuf 编译器”选项的项目中添加必要的 nuget 包,2. 如果 protoc 文件与您想要的项目位于不同的项目中生成C#代码,必须添加项目引用
1.安装所需的Nuget包
在任何想要从 protoc 文件创建代码隐藏 c# 文件(并且具有 protoc 文件的“Protobuf 编译器”选项)的项目中,您应该安装以下 nuget 包:
Grpc.Tools
Google.Protobuf
Run Code Online (Sandbox Code Playgroud)
或引用它们的包,例如Grpc.AspNetCore。通过添加这些包,您将为所有 proto 文件提供“Protobuf 编译器”选项,即使它们是从不同的项目(例如共享类库)引用的。
2.添加proto文件的项目引用
如果您有一个项目想要为 proto 文件创建代码隐藏文件,但 *.proto 文件位于不同的项目中,则必须添加引用。例如,如果在名为Shared 的共享类库中名为Protos的命名空间中有一个connections.proto文件,并且我想在名为Client的客户端项目中使用生成的代码,则必须在客户端项目,在客户端项目中添加共享类库的项目引用,并在 Client.csproj 中添加以下内容:
<ItemGroup>
<Protobuf Include="..\Shared\Protos\connections.proto" GrpcServices="Client">
<Link>Protos\connections.proto</Link>
</Protobuf>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
现在,客户端项目中引用了connections.proto文件及其“Protobuf 编译器”选项,但该文件本身位于不同的项目(共享类库)中。
| 归档时间: |
|
| 查看次数: |
5906 次 |
| 最近记录: |