在 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 外壳(matchgroupmatch_group - 25 与 41 IIRC),您也可以重命名 .proto 中的一个字段(protobuf 不太关心名称)。 有效!所有文件成功导入!感谢您对此提供的所有帮助,如果您需要进行任何类型的测试,请告诉我:) 现在让我弄清楚我在用数据做什么!

以上是关于在 vb.net 中使用 .proto 文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 VB.NET 中使用 DeviceIoControl 进行文件枚举比在 C++ 中更快?

VB.NET:使用 XDocument 在 XML 文件中添加/编辑/删除 XElement

如何在 VB.NET 项目中插入 exe 文件并使用此文件发布应用程序?

在VB.NET中单击按钮时打开一个txt文件

如何使用 vb.net 保存 excel 文件?

VB.Net 2010中 ./和../的含义