在 vb.net 中使用 .proto 文件
Posted
技术标签:
【中文标题】在 vb.net 中使用 .proto 文件【英文标题】:Using .proto files in vb.net 【发布时间】:2018-03-08 15:20:46 【问题描述】:我正在尝试掌握 protobuf-net,因为我相信这是帮助我反序列化 protobuf 创建的文件的正确工具。我已设法找到与相关文件相关的 .proto 文件,因此我相信我拥有处理该文件所需的所有原始信息。这是我的问题:
protobuf-net github page 说你必须像这样装饰你的类:
[ProtoContract]
class Person
[ProtoMember(1)]
public int Id get;set;
[ProtoMember(2)]
public string Name get;set;
[ProtoMember(3)]
public Address Address get;set;
[ProtoContract]
class Address
[ProtoMember(1)]
public string Line1 get;set;
[ProtoMember(2)]
public string Line2 get;set;
我的问题是,我是否需要从找到的每个 .proto 文件在我的项目中创建一个新类,并逐行将它们转换为上述格式?有没有办法可以引用 .proto 文件?
【问题讨论】:
【参考方案1】:编辑:protogen 的 VB.NET 工具已经实现,现在可以通过 protobuf-net 在https://protogen.marcgravell.com 获得;命令行工具尚未更新,但会在接下来的几天内更新(代码相同,只是发布方式不同)。
protobuf-net 有一个 .proto 代码生成工具。 with r668 发布的 protogen 版本包括 VB.NET 支持,但不是最新的“proto3”和各种其他 protobuf 概念。在 protobuf-net 2.3 中,protogen 工具被完全重写为完全托管并包含现代 .proto 概念,但是:虽然 API 是语言可扩展的,但我没有实现VB.NET 生成器,主要是因为我不是编写惯用 VB.NET 代码的可靠智慧来源。
如果你想实现一个 VB.NET 生成器,实际上它不会做太多工作,我很乐意接受 PR。
【讨论】:
@FraserOfSmeg 正确;图书馆不知道也不关心您使用的是什么语言 - 它只是查看元数据。 @FraserOfSmeg 如果我有时间,我会看看我是否可以对现有代码进行 VB 化;我对它是一个怪物有点谨慎,但我会试一试...... @FraserOfSmeg 哦,我的意图是它基本上是defaultPath = defaultPath?.Replace("#FILE#", nameWithoutExtension).Replace('#DIR#', finalFolderName)
- 这正是允许的;我会看看我以后能不能破解它
@FraserOfSmeg 所以 1.0.5 是“向上”;以下对我有用,并在一个项目中编译 所有 VB,并且零错误或警告:protogen --proto_path=c:\code\SteamKit\Resources\Protobufs --vb_out=c:\code\protogen\vb **/*.proto --package=#DIR#.#FILE# +names=original
- 请注意,+names=original
只需要 一个文件 - tf_beta
之一;如果您想要更漂亮的 VB 外壳(matchgroup
与 match_group
- 25 与 41 IIRC),您也可以重命名 .proto 中的一个字段(protobuf 不太关心名称)。
有效!所有文件成功导入!感谢您对此提供的所有帮助,如果您需要进行任何类型的测试,请告诉我:) 现在让我弄清楚我在用数据做什么!以上是关于在 vb.net 中使用 .proto 文件的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 VB.NET 中使用 DeviceIoControl 进行文件枚举比在 C++ 中更快?
VB.NET:使用 XDocument 在 XML 文件中添加/编辑/删除 XElement