【问题标题】:C# Binary Formatters - Deserialization throws IO exception [duplicate]C# 二进制格式化程序 - 反序列化引发 IO 异常 [重复]
【发布时间】:2013-09-23 00:05:52
【问题描述】:

所以我有一个包含一些内容的序列化二进制文件,我正在尝试反序列化它。

我有:

    try
    {
        using (Stream stream = File.Open(file, FileMode.Open))
        {
            BinaryFormatter bin = new BinaryFormatter();

            var contents = bin.Deserialize(stream);
        }
    }
    catch (IOException io)
    {
        Debug.LogError(io.ToString());
    }

但是我得到一个 IO 异常

System.IO.FileNotFoundException:无法加载文件或程序集 '打包工具,版本=1.0.0.0,文化=中性, PublicKeyToken=null' 或其依赖项之一。系统无法 找到指定的文件。文件名:'打包工具,版本=1.0.0.0, Culture=neutral, PublicKeyToken=null'

这是文件本身的开始。我在控制台应用程序中尝试过,它运行良好,但是当我将它导入 Unity3D 时,事情变得一团糟。有人知道问题的根源可能在哪里吗?

另外,当我用 bin.Deserialize 注释该行时,异常消失了。

【问题讨论】:

    标签: c# .net binary unity3d deserialization


    【解决方案1】:

    Deserialize 方法将字节流转换为对象,在序列化期间,Binary Formatter 尝试定位在名为 Packaging Tool 的程序集中声明的对象。由于找不到程序集,因此无法实例化对象,因此引发异常。

    确保打包工具程序集存在于您的应用程序文件夹中或在 GAC 中注册。

    【讨论】:

      【解决方案2】:

      在运行时似乎无法找到您的一个或多个程序集。该错误可能是由于包含Packaging Tool 的文件丢失或未包含在输出目录中。

      当您导入 Unity3D 时,您是否也导入了依赖项?即Packaging Tool 文件?

      【讨论】:

      • 感谢您的回答。包含程序集的最佳方式是什么?我的意思是,我不想让其他人看到它。有没有一种方法可以序列化/反序列化而不依赖于程序集?
      • 在你开始考虑隐藏它之前,你需要确认这是否能解决问题。为了测试以确定这是否是问题,请像其他人一样导入库(或复制到保存项目结果 exe 的输出文件夹) - 这将确定这是否是问题。
      • 好吧,我将exe添加到dll所在的文件夹中,当我运行它时,会抛出相同的异常......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2020-08-24
      • 2014-01-04
      相关资源
      最近更新 更多