在新机器上安装后抛出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和源代码。所以无论现在出了什么问题,都与此无关。

在新机器上安装后抛出InvalidCastException

找到了!我开始逐步检查我的代码,发现两个相同的程序集实际上是不同的实例。我一直在使用这个程序作为一个网站的类库。因此,在工作目录中有一个项目的。dll和开始调试过程时创建的。exe。

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

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

我可能是错的,但尝试在c#中托管代码,你会得到解决方案。

祝一切顺利