2011-07-25 30 views
2

我一直在使用Visual Studio 2010 C#。在新機器上安裝後拋出InvalidCastException

我一直在爲這個計劃工作近一年了。其中,我使用存儲在單獨的XML文件中的信息來構建圖像。這個過程已經爲我工作了數百次,沒有任何問題。

我已經遷移到新機器。以前的機器是32位,新的是64位。當我打開一個文件,並試圖反序列化,下面的異常被拋出:

System.InvalidCastException was unhandled Message=[A]System.Collections.Generic.List 1[BookCreator.pageFontInfo] cannot be cast to [B]System.Collections.Generic.List 1[BookCreator.pageFontInfo]. Type A originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the context 'LoadNeither' at location 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. Type B originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in the context 'LoadNeither' at location '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是一個定製的序列化結構。它包含兩個字符串,一個浮點數和一個點列表。我不知道發生了什麼問題。我比較了列表的兩個「起源」,它們是相同的。我完全被難住了。在遷移之前,這在過去已經運行了數百次。

編輯: 我剛查過。我在另一臺64位的機器上運行了編譯後的.exe和源代碼。所以現在不管發生什麼事都與此無關。這是特定於Visual Studio 2010的安裝。

+0

我相信這是一些參考問題,你有什麼東西放在'GAC'這是造成一些歧義? – V4Vendetta

回答

3

找到了!我開始瀏覽代碼,發現兩個相同的程序集實際上是不同的實例。我一直在使用該程序作爲網站的類庫。所以在工作目錄中是一個.dll項目以及在開始調試過程時創建的.exe文件。

加載時,程序加載了.dll和.exe。我所要做的就是進入工作目錄,並將它們都刪除。然後錯誤消失了。

0

我瞭解您的問題 我認爲您的代碼不是託管代碼 您的代碼應該針對CLR。如果你做到了這一點,你的代碼可以在任何地方工作無論是32位還是64位機器。

我可能是錯的,但嘗試在C#中的託管代碼,你會得到解決方案。

全部最好

+0

也可能值得一提的是,我也有一些程序在其他幾臺機器上運行,並且已經在Web應用程序中使用它作爲類庫,沒有任何問題。 – julio9