如何在VS 2019中的非grpc服务项目中添加proto文件

kzf*_*fid 4 c# protocol-buffers visual-studio-2019

在 grpc 服务项目中,当我添加新项目/文件时,我可以选择文件类型为“协议缓冲区文件”,“构建操作”(在文件属性中)为“Protobuf 编译器”

但是,当我有一个非 grpc 服务项目(例如类库)时,在添加新文件时没有可以选择的“协议缓冲区文件”类型。即使我使用 .proto ext 创建文件,“构建操作”中也没有我可以选择的“Protobuf 编译器”。

有什么方法可以在非 grpc 服务项目中添加 proto 文件,或者我只能手动编辑项目 .csproj (我的意思是将有关 proto 文件的 xml 节点从 grpc 服务项目复制到非 grpc 服务项目)?

dan*_*kli 8

你想做的事情是可能的。

您提到的“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 编译器”选项,但该文件本身位于不同的项目(共享类库)中。