在新计算机上安装后抛出InvalidCastException

时间:2011-07-25 04:42:43

标签: c# .net visual-studio-2010 struct xmlserializer

我一直在使用Visual Studio 2010,C#。

我已经在这个项目上工作了近一年了。在其中,我使用存储在单独的XML文件中的信息来构建图像。这个过程对我有好几百次没有问题。

我已迁移到新机器。之前的机器是32位,新的是64位。当我打开文件并尝试反序列化时,抛出以下异常:

  

System.InvalidCastException未处理     消息= [A] {System.Collections.Generic.List {1}} 1 [BookCreator.pageFontInfo]。   A型起源于   'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'在上下文'LoadNeither'位置'C:\ Windows \ Microsoft.Net \ assembly \ GAC_64 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib .dll文件”。 B型起源于   'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'在上下文'LoadNeither'位置'C:\ Windows \ Microsoft.Net \ assembly \ GAC_64 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib的.dll”。

以下是生成错误的代码:

1[BookCreator.pageFontInfo] cannot be cast to 
            [B]System.Collections.Generic.List

pageFontInfo是一个自定义构建的Serializable结构。它包含两个字符串,一个浮点数和一个点列表。我不知道出了什么问题。我比较了列表的两个“起源”,它们是相同的。我完全难过了。在迁移之前,这已经过去了数百次。

编辑: 我刚刚检查过我在另一台64位机器上运行了编译的.exe和源代码。所以现在出现的任何问题与此无关。它特定于Visual Studio 2010的此安装。

2 个答案:

答案 0 :(得分:3)

发现它!我开始单步执行代码,发现两个相同的程序集实际上是不同的实例。我一直在使用该程序作为网站的类库。所以在工作目录中是项目的.dll以及开始调试过程时创建的.exe。

加载时,程序正在加载.dll和.exe。我所要做的就是进入工作目录,然后删除它们。然后错误就消失了。

答案 1 :(得分:0)

我理解你的问题 我认为您的代码不是托管代码 您的代码应该以CLR为目标。如果你做得正确,你的代码可以在任何地方工作无论是32位还是64位机器。

我可能错了,但尝试使用c#中的托管代码,您将获得解决方案。

一切顺利