【发布时间】:2016-01-19 16:46:12
【问题描述】:
我编写了一个带有Save() 和Load() 方法的DLL,使用BinaryFormatter.Serialize() 和BinaryFormatter.Deserialize() 将List<MyObject> 保存或加载到我计算机上的文件中。
在我决定为我的程序集添加强命名之前,这一直很好。一旦我在编译过程中添加了一个具有强名称的密钥,我的程序就不再能够加载预强命名文件。我得到一个 TargetInvocationException 和一个 FileLoadException 作为 InnerException 说 MyAssembly, Version=1.0.1.0, Culture=neutral, PublicKeyToken=null 没有找到。
当我使用 HEX 编辑器打开文件时,我可以在文件中看到对我的程序集的多个引用:MyAssembly, Version=1.0.1.0, Culture=neutral, PublicKeyToken=null。
当我使用新的强命名程序集保存文件时,会发生一件事:PublicKeyToken=123456789。当然,123456789 是另一个值。
现在我想到了几个问题:
- 为什么保存文件的 Assembly 版本很重要?
- 如果我想编写另一个程序来访问这些文件中的数据……这可能吗?
- 我可以转换 pre-strong-naming-files 以便我可以使用强命名程序集读取它们吗?
我已经尝试将 PublicKeyToken=null 更改为 PublicKeyToken=123456789 但这只会引发 SerializationException 表示没有有效的 BinaryHeader 或对象版本已更改。
【问题讨论】:
标签: c# .net serialization strongname