我一直在使用Visual Studio 2010,C#。
我从事这项计划已有将近一年的时间。在其中,我使用存储在单独的XML文件中的信息来构建图像。这个过程为我工作了数百次,没有问题。
我已迁移到新机器。以前的机器是32位,新的是64位。当我打开文件并尝试反序列化时,将引发以下异常:
未处理System.InvalidCastException
消息= [A] System.Collections.Generic.List 1[BookCreator.pageFontInfo] cannot be cast to [B]System.Collections.Generic.List
1 [BookCreator.pageFontInfo]。
类型A源自
在位置'C:\ Windows \ Microsoft.Net \ assembly \ GAC_64 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib的位置'LoadNoth'中的'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' .dll”。 B型起源于
在位置'C:\ Windows \ Microsoft.Net \ assembly \ GAC_64 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib的位置'LoadNoth'中的'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' .dll”。
这是生成错误的代码:
List<pageFontInfo> info;
XmlSerializer serializer = new XmlSerializer(typeof(List<pageFontInfo>));
TextReader tr = new StreamReader(openFile);
info = (List<pageFontInfo>)serializer.Deserialize(tr); <---error thrown
pageFontInfo是一个自定义构建的Serializable结构。它包含两个字符串,一个浮点数和一个点列表。我不知道出了什么问题。我已经比较了列表的两个“来源”,它们是相同的。我完全迷住了。在迁移之前,这已经进行了数百次。
编辑:
我刚刚检查。我已经在另一台64位计算机上运行了已编译的.exe和源代码。因此,现在出了什么问题都与此无关。它特定于此安装的Visual Studio 2010。
最佳答案
找到了!我开始逐步检查代码,发现两个相同的程序集实际上是不同的实例。我一直在将该程序用作网站的类库。因此,在工作目录中是项目的.dll以及开始调试过程时创建的.exe。
加载时,程序正在加载.dll和.exe。我要做的就是进入工作目录,然后将它们都删除。然后错误消失了。