当前位置: 首页 > 知识库问答 >
问题:

使用Google协议生成C#文件失败

马泓
2023-03-14

我正在从事一个使用Java、C#和C应用程序的项目。为了在他们之间进行通信,我尝试使用Google协议缓冲区。我正在使用以下命令。原型文件,取自示例:

package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;
}

我指的是以下教程:https://developers.google.com/protocol-buffers/docs/csharptutorial

其他语言的教程也在那里。

我为每种语言尝试了以下命令行参数:

Java:

C:\ProtoBuf\protoc-I=C:\trash--java_out=C:\trash C:\trash/addressbook。原型

C:

cpp_out=C:\垃圾C:\垃圾/addressbook.proto

C#:

csharp_out=C:\垃圾C:\垃圾/addressbook.proto

Java和C编译可以正常工作,即使有一些警告以防Java。但是我用C#得到以下输出:

--csharp\u out:protoc gen csharp:系统找不到指定的文件。

我正在使用此编译器:https://github.com/google/protobuf/releases/download/v2.6.1/protoc-2.6.1-win32.zip

我在这里做错了什么?我需要任何其他文件来进行C#编译吗?

共有3个答案

云啸
2023-03-14

我在所有路径中使用\(反斜杠)的/(斜杠)intad解决了所有问题。

普洛托克语。exe-I=D:/dev/xyz/projects-csharp\u out=D:/temp D:/dev/xyz/projects/messages。原型

海翼
2023-03-14

我知道如何用c生成proto文件#

  1. 打开visual studio,打开nuget命令行,键入:Install Package Google。ProtocolBuffers,链接:Google。协议缓冲区2.4.1.555
  2. 查找软件包/谷歌。协议缓冲区。2.4.1.555/tools/ProtoGen。exe
  3. 使用命令行,类型:ProtoGen。exe地址簿。proto-output\u directory=C:\trash

我为gen proto文件gen.py编写了一个python脚本

import os, subprocess, threading

def main():
    with open("conf.txt") as file:
        exe = os.path.join(os.getcwd(), "..\\Package\\Google.ProtocolBuffers.2.4.1.555\\tools\\ProtoGen.exe")
        out = "-output_directory=%s" % (os.path.join(os.getcwd(), "..\\Common\\libs\\protos"))
        def gen(proto):
            subprocess.check_call([exe, os.path.join("protos", proto), out])
        list = []
        for proto in file.read().split(','):
            t = threading.Thread(target = gen, args = (proto, ))
            t.start()
            list.append(t)
        for t in list:
            t.join()

if __name__ == '__main__':
    main()

conf.txt

base.proto,test.proto,addressbook.proto
方英耀
2023-03-14

您正在尝试使用旧版本的协议生成C#文件

protoc-2.6.1-win32。拉链

proto2和proto3的C#代码生成器仅在版本3.0.0-alpha-3中引入

将两种新的语言实现(Objective-C、C#)引入到Prop3。

所以,下载协议版本3.0.0-alpha-3,安装它并调用协议-我=$SRC_DIR--csharp_out=$DST_DIR$SRC_DIR/your.proto

请注意,从3.0.0-beta-1 C版开始,code generator仅支持生成proto3:

支持Proto3语义;C#codegen禁止使用proto2文件

 类似资料:
  • 我一直在试图让汽车制造商自动决定如何建造。pb。抄送和。pb。来自google协议缓冲区的hh文件。原型描述,但没有运气。 我试过在SO上使用这篇文章,但仍然不起作用。 这是我的Makefile的摘录。是: 尝试运行make时,我得到: ac\u proto\u cmd由configure填充到protoc二进制文件的路径。ac,当它检查GPB依赖关系时。我已经验证了它的格式是“/opt/comm

  • 我有几个。具有proto2语法的proto文件。我试图使用protoc编译器自动生成C#类,但我得到了一个错误:“C#代码生成只支持proto3语法。 而不是手动更新每个。proto文件要符合proto3语法,是否有其他方法可以自动生成C#类?我对protobuf完全陌生,所以我知道这听起来像是一个奇怪的问题,因为编译器明确指出我必须遵循proto3语法-我只是想知道是否有办法让C类使用proto

  • 我刚刚开始玩google proto。当我尝试编译proto java示例中的proto文件时,它不会生成任何grpc文件。 原型文件,https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/hello_world.proto 终端输出, rsonkhla@raman-OptiPlex-9020:~/sandbox

  • 我目前在编译protobuf生成的C代码时遇到了一些问题<代码>协议(code>protoc)运行正常,不会显示任何警告,但是,当我尝试编译生成的C代码以便构建静态库时,g向我显示以下消息: CanInfo。pb。抄送:107:5:错误:“::protobuf\u BusType\u 2eproto”尚未声明107;::protobuf\u BusType\u 2eproto::AddDescri

  • 正如问题所说,我从源代码编译了grpc,也做了,但是,grpc_python_plugin的

  • 当我尝试运行gtfs\u realtime\u pb2时,我遇到以下错误。py(通过google的协议缓冲区运行gtfs-realtime.proto生成的python代码): 这是指向我遇到问题的特定代码的链接:https://github.com/mattwigway/gtfsrdb 以及安装谷歌协议缓冲区的链接: https://developers.google.com/protocol-