VB.NET:创建可传输的.bin文件

VB.NET:创建可传输的.bin文件,vb.net,Vb.net,我正在写一个有玩家帐户的项目,并将关于玩家帐户的简单信息存储在一个名为“PlayerAccount”的类中。比如他们解决的谜题数量、他们解决谜题的最快时间、解决谜题的总时间等。我有一个高分板,根据这些不同的标准对玩家进行排名。玩家存储在一个数组中(该数组位于一个名为“PlayerLibrary”的类中),然后将其保存为一个名为PlayerLibrary.bin的.bin文件。我想正确地测试这个高分板,但是人工创建数据来测试它的不同方面有点困难。因此,我在一个单独的控制台项目中创建了一个小工具来完

我正在写一个有玩家帐户的项目,并将关于玩家帐户的简单信息存储在一个名为“PlayerAccount”的类中。比如他们解决的谜题数量、他们解决谜题的最快时间、解决谜题的总时间等。我有一个高分板,根据这些不同的标准对玩家进行排名。玩家存储在一个数组中(该数组位于一个名为“PlayerLibrary”的类中),然后将其保存为一个名为PlayerLibrary.bin的.bin文件。我想正确地测试这个高分板,但是人工创建数据来测试它的不同方面有点困难。因此,我在一个单独的控制台项目中创建了一个小工具来完成这项工作,而不是将代码的其余部分弄乱。基本上,我复制并粘贴了“PlayerAccount”和“PlayerLibrary”这两个类,将一些内容从私有更改为公共,并添加了一些与工具相关的错误检查,然后创建了一个小界面来创建和编辑.bin文件,这样我就可以轻松地添加、删除和编辑有关玩家的所有详细信息。这一切都已完成,工作正常。我可以在这个单独的工具中保存和加载文件。一切都很好。但是,当我尝试在主程序中加载此工具创建的文件时,我会出现以下错误:

找不到程序集的播放器库工具,版本=1.0.0.0, 区域性=中性,PublicKeyToken=空'

以下是我在主程序中的保存和加载子程序(都可以在PlayerLibrary中找到):


如果有人能告诉我,我需要做些什么才能使这些文件可以转让,我将不胜感激

您需要引用主项目(或共享dll),而不是将类文件复制粘贴到控制台项目中。否则,类就不同了。二进制序列化包含类信息,控制台项目的类虽然相同,但不相同。这就是你的错误。我会在控制台应用程序中引用主应用程序,而不是复制代码。这样,二进制序列化使用的是完全相同的类。@pinkfloydx33好的,谢谢。这是有道理的。我不认为你能为我指出正确的方向,告诉我如何做到这一点?主应用程序和工具是否在同一个解决方案中?如果是这样,只需在解决方案资源管理器中展开工具的项目节点,右键单击引用,然后将项目引用添加到主应用程序。如果不是,则执行相同的操作,但不是项目引用,而是通过浏览主应用程序的编译.exe输出来添加文件引用。一个更好但稍微复杂的解决方案是将“数据”类作为类添加到与主应用程序和工具相同的解决方案中的共享“库”项目中。然后,您可以从其他两个项目或添加到相同数据的任何其他项目中引用此数据集。它们之间共享的任何内容都可以进入此库。您需要引用主项目(或共享dll),而不是将类文件复制粘贴到控制台项目中。否则,类就不同了。二进制序列化包含类信息,控制台项目的类虽然相同,但不相同。这就是你的错误。我会在控制台应用程序中引用主应用程序,而不是复制代码。这样,二进制序列化使用的是完全相同的类。@pinkfloydx33好的,谢谢。这是有道理的。我不认为你能为我指出正确的方向,告诉我如何做到这一点?主应用程序和工具是否在同一个解决方案中?如果是这样,只需在解决方案资源管理器中展开工具的项目节点,右键单击引用,然后将项目引用添加到主应用程序。如果不是,则执行相同的操作,但不是项目引用,而是通过浏览主应用程序的编译.exe输出来添加文件引用。一个更好但稍微复杂的解决方案是将“数据”类作为类添加到与主应用程序和工具相同的解决方案中的共享“库”项目中。然后,您可以从其他两个项目或添加到相同数据的任何其他项目中引用此数据集。他们之间共享的任何内容都可以进入此库。
Sub binSave()
        Dim fsWrite As FileStream = New FileStream("PlayerLibrary.bin", FileMode.OpenOrCreate)
        Dim bf As New BinaryFormatter
        bf.Serialize(fsWrite, ArrPlayers)
        fsWrite.Close()
End Sub

Sub binLoad()
    Dim fsRead As New FileStream("PlayerLibrary.bin", FileMode.Open)
    Dim bf As New BinaryFormatter
    ArrPlayers = bf.Deserialize(fsRead)
    fsRead.Close()
End Sub