使用 Google 协议生成 C# 文件失败
Generation of C# files with Google Protocol Fails
我正在开发一个使用 Java、C# 和 C++ 应用程序的项目。为了在它们之间进行通信,我正在尝试使用 Google 协议缓冲区。我正在使用以下 .proto 文件,该文件取自示例:
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.proto
C++:
C:\ProtoBuf\protoc -I=C:\trash --cpp_out=C:\trash C:\trash/addressbook.proto
C#:
C:\ProtoBuf\protoc -I=C:\trash --csharp_out=C:\trash C:\trash/addressbook.proto
Java 和 C++ 编译工作正常,即使在 Java 的情况下有一些警告。但是我得到以下输出 C# :
--csharp_out: protoc-gen-csharp: The system cannot find the file specified.
我正在使用这个编译器:https://github.com/google/protobuf/releases/download/v2.6.1/protoc-2.6.1-win32.zip
我在这里做错了什么?我需要任何其他文件进行 C# 编译吗?
我知道如何在 C# 中生成原型文件
- 打开visual studio,打开nuget命令行,输入:Install-Package Google.ProtocolBuffers,link:Google.ProtocolBuffers 2.4.1.555
- 找到Package/Google.ProtocolBuffers.2.4.1.555/tools/ProtoGen.exe
- 使用命令行,输入:ProtoGen.exe addressbook.proto -output_directory=C:\trash
我写了一个 python 脚本来生成原始文件,gen.py
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
您正在尝试使用旧版本的协议生成 C# 文件
protoc-2.6.1-win32.zip
中引入了 proto2 和 proto3 的 C# 代码生成器
Introduced two new language implementations (Objective-C, C#) to
proto3.
所以,下载 protoc Version 3.0.0-alpha-3,安装它并调用:
protoc -I=$SRC_DIR --csharp_out=$DST_DIR $SRC_DIR/your.proto
当心 从 Version 3.0.0-beta-1 开始的 C# 代码生成器仅支持生成 proto3:
Proto3 semantics supported; proto2 files are prohibited for C# codegen
我在所有路径中使用 /(斜线)而不是 \(anti-slash)解决了所有问题。
protoc.exe -I=D:/dev/xyz/projects --csharp_out=d:/temp D:/dev/xyz/projects/messages.proto
我正在开发一个使用 Java、C# 和 C++ 应用程序的项目。为了在它们之间进行通信,我正在尝试使用 Google 协议缓冲区。我正在使用以下 .proto 文件,该文件取自示例:
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.proto
C++:
C:\ProtoBuf\protoc -I=C:\trash --cpp_out=C:\trash C:\trash/addressbook.proto
C#:
C:\ProtoBuf\protoc -I=C:\trash --csharp_out=C:\trash C:\trash/addressbook.proto
Java 和 C++ 编译工作正常,即使在 Java 的情况下有一些警告。但是我得到以下输出 C# :
--csharp_out: protoc-gen-csharp: The system cannot find the file specified.
我正在使用这个编译器:https://github.com/google/protobuf/releases/download/v2.6.1/protoc-2.6.1-win32.zip
我在这里做错了什么?我需要任何其他文件进行 C# 编译吗?
我知道如何在 C# 中生成原型文件
- 打开visual studio,打开nuget命令行,输入:Install-Package Google.ProtocolBuffers,link:Google.ProtocolBuffers 2.4.1.555
- 找到Package/Google.ProtocolBuffers.2.4.1.555/tools/ProtoGen.exe
- 使用命令行,输入:ProtoGen.exe addressbook.proto -output_directory=C:\trash
我写了一个 python 脚本来生成原始文件,gen.py
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
您正在尝试使用旧版本的协议生成 C# 文件
中引入了 proto2 和 proto3 的 C# 代码生成器protoc-2.6.1-win32.zip
Introduced two new language implementations (Objective-C, C#) to proto3.
所以,下载 protoc Version 3.0.0-alpha-3,安装它并调用:
protoc -I=$SRC_DIR --csharp_out=$DST_DIR $SRC_DIR/your.proto
当心 从 Version 3.0.0-beta-1 开始的 C# 代码生成器仅支持生成 proto3:
Proto3 semantics supported; proto2 files are prohibited for C# codegen
我在所有路径中使用 /(斜线)而不是 \(anti-slash)解决了所有问题。
protoc.exe -I=D:/dev/xyz/projects --csharp_out=d:/temp D:/dev/xyz/projects/messages.proto