【问题标题】:How to add proto file in a non-grpc service project in VS 2019VS 2019中如何在非grpc服务项目中添加proto文件
【发布时间】:2022-12-10 04:53:41
【问题描述】:

在 grpc 服务项目中,当我添加一个新的项目/文件时,我可以选择文件类型为“Protocol Buffer File”,“Build Action”(在文件属性中)为“Protobuf compiler”

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

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

【问题讨论】:

    标签: c# visual-studio-2019 protocol-buffers


    【解决方案1】:

    你想做的事是可能的。

    您提到的“Protobuf 编译器”选项来自Grpc.Tools Nuget Package,它使用protobuf compiler protoc 生成C# 代码。当您构建项目并希望在构建过程中从 protobuf 文件生成代码隐藏文件时,您需要此包或元数据包(如 Grpc.AspNetCore),它在项目中包含对它的引用。在构建过程中,如果您设置了“Protobuf 编译器”选项,则 protoc 会构建代码隐藏文件。就像你说的,在默认的“ASP.NET Core gRPC Service”项目中你有“Protobuf compiler”选项,那是因为它有Grpc.AspNetCore默认安装 nuget 包。编辑:正如 kzfid 所提到的,包谷歌.Protobuf需要编译由 protoc 生成的 C# 代码。


    因此,简而言之,您要做的是:1. 在您想要“Protobuf 编译器”选项的项目中添加必要的 nuget 包,以及 2. 如果 protoc 文件位于与您想要的项目不同的项目中生成 C# 代码,你必须添加项目引用

    1.安装所需的Nuget包

    在任何要从 protoc 文件创建代码隐藏 c# 文件的项目中(并为 protoc 文件提供“Protobuf 编译器”选项),您应该安装以下 nuget 包:

    Grpc.Tools
    Google.Protobuf
    

    或引用它们的包Grpc.AspNetCore.通过添加这些包,您将拥有适用于所有原型文件的“Protobuf 编译器”选项,即使它们是从不同的项目(如共享类库)引用的。

    2.为proto文件添加项目引用

    如果您有一个项目,您希望在其中为 proto 文件创建代码隐藏文件,但 *.proto 文件位于不同的项目中,则必须添加引用。例如,如果有一个连接.proto命名空间中的文件名为原型在名为的共享类库中共享,我想在名为的客户端项目中使用生成的代码客户,我必须在客户端项目中安装上面提到的 nuget 包,在客户端项目中为共享类库添加项目引用,并在 Client.csproj 中添加以下内容:

    <ItemGroup>
        <Protobuf Include="..SharedProtosconnections.proto" GrpcServices="Client">
            <Link>Protosconnections.proto</Link>
        </Protobuf>
    </ItemGroup>
    

    现在有连接.proto客户端项目中引用的文件及其“Protobuf 编译器”选项,但文件本身位于不同的项目(共享类库)中。

    【讨论】:

    • 正是我想要的。谢谢。从来没有意识到编译器在包内(以为它是 IDE 中的内置编译器)。 {Grpc.Tools} 是生成 c# 代码的编译器/代码生成器,{Google.Protobuf} 是编译生成的 c# 代码所需的包。只有一件事,即使在安装包并重新启动 IDE 之后,当我选择“添加新项目”时也没有 .proto 文件模板。但没什么大不了的,我可以稍后更改“文件属性”中的“构建操作”。
    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 2019-05-12
    • 2020-08-24
    • 2020-06-25
    • 2021-11-19
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多