在新机器上安装后抛出InvalidCastException
本文关键字:安装 InvalidCastException 新机器 机器 | 更新日期: 2023-09-27 18:03:38
我一直在使用Visual Studio 2010, c#。
我做这个项目已经快一年了。在本文中,我使用存储在单独XML文件中的信息来构建图像。这个过程对我来说已经成功了几百次,没有任何问题。我已经迁移到一台新机器。以前的机器是32位的,新的是64位的。当我打开一个文件并尝试反序列化时,会抛出以下异常:
系统。InvalidCastException未处理消息= []System.Collections.Generic。列表
1[BookCreator.pageFontInfo] cannot be cast to [B]System.Collections.Generic.List
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'.
下面是生成错误的代码:
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和源代码。所以无论现在出了什么问题,都与此无关。
找到了!我开始逐步检查我的代码,发现两个相同的程序集实际上是不同的实例。我一直在使用这个程序作为一个网站的类库。因此,在工作目录中有一个项目的。dll和开始调试过程时创建的。exe。
加载时,程序同时加载。dll文件和。exe文件。我所要做的就是进入工作目录,并删除它们。然后错误消失。
我理解你的问题我认为你的代码不是托管代码您的代码应该以CLR为目标。如果你正确地做了,你的代码可以在任何地方工作,无论它是32位还是64位机器。
我可能是错的,但尝试在c#中托管代码,你会得到解决方案。
祝一切顺利