InvalidCastException выбрасывается после установки на новую машину


Я использую Visual Studio 2010, C#.

Я работаю над этой программой уже почти год. В нем я использую информацию, хранящуюся в отдельных XML-файлах, для создания образов. Этот процесс работал для меня сотни раз без проблем.

Я перешел на новую машину. Предыдущая машина была 32-битной, новая-64-битной. Когда я открываю файл и пытаюсь десериализовать его, возникает следующее исключение:

Система.Исключение invalidcastexception было обработано Сообщение=[A]Система.Коллекции.Родовой.Список 1[BookCreator.pageFontInfo] cannot be cast to [B]System.Collections.Generic.List1 [BookCreator.pageFontInfo]. Тип А происходит от 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 'в контексте' LoadNeither ' в местоположении 'C:WindowsMicrosoft.NetassemblyGAC_64mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll'. тип B происходит от 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 'в контексте 'LoadNeither' в местоположении 'C:WindowsMicrosoft.NetassemblyGAC_64mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.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-это специально построенная Сериализуемая структура. Он содержит две строки, поплавок и список точек. Я понятия не имею, что происходит. Я сравнил два "происхождения" списков, и они идентичны. Я совершенно сбит с толку. Это работало сотни раз в прошлом прежде чем миграция.

Править: Я только что проверил. Я запустил оба скомпилированных .exe и исходный код на другой машине, которая была 64-битной. Поэтому то, что сейчас происходит не так, не имеет к этому никакого отношения. Это специфично для данной установки Visual Studio 2010.

2 2

2 ответа:

Нашел! Я начал просматривать свой код и обнаружил, что две идентичные сборки на самом деле были разными экземплярами. Я использую программу в качестве библиотеки классов для веб-сайта. Так что в рабочем справочнике был А.dll проекта вместе со своим .exe создается при запуске процесса отладки.

При загрузке программа загружала оба файла .dll, и то .exe. Все, что мне нужно было сделать, это зайти в рабочий каталог и удалить их обоих. Затем ошибка исчезла.

Я понимаю вашу проблему. я думаю, что ваш код не является управляемым кодом Ваш код должен быть нацелен на CLR. если вы сделали это правильно, ваш код может работать в любом месте, независимо от того, является ли он 32-разрядной или 64-разрядной машиной.

Я могу ошибаться, но попробуйте управляемый код в c# , и вы получите решение.

Всего наилучшего