2010-09-23 79 views
2

我最近將我的機器升級到XP 64位,並對我們的軟件進行了一些代碼更改,當我在做new XmlSerializer(valueType)時,其中valueType是使用DirectoryItem的類型,我得到了以下錯誤:無法生成臨時類

Unable to generate a temporary class (result=1). error CS0012: The type 'XYZ.Blob.DirectoryItem' is defined in an assembly that is not referenced. You must add a reference to assembly 'XYZ.Services.Blob, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

我真的不明白它爲什麼會顯示此錯誤。該DLL位於src文件夾中,並且完全相同的應用程序在同一臺計算機上運行時(以前的版本)沒有問題。

如果您有任何想法,我怎麼能找到它會給這個錯誤帶來的好處。

+1

爲什麼在名爲「src」的文件夾中有DLL?這通常是存儲源代碼文件的文件夾的名稱,而不是DLL。你的項目設置聽起來很不尋常,很難幫助你。 – 2010-09-23 21:19:09

+0

它與src沒有任何關係,我偶然添加它;結構就像標準.net strcutre – 2010-09-24 13:42:21

回答

1

您的程序集是爲x86平臺而構建的。

看看你的項目的屬性 - > build - > target platform 默認情況下它是x86。您需要重新編譯x64。

最好的選擇是編譯爲「任何」 - 在你的情況。

+0

你是對的,我的程序集是爲x86平臺構建的,但是通過design.i在64位機器上運行,但我們的應用程序需要暫時爲x86構建。 – 2010-09-24 13:41:43

+0

我也不明白爲什麼它告訴你它找不到引用,而引用是在那裏,並且dll在輸出目錄中 – 2010-09-24 13:44:42

+0

它找不到引用,因爲它是爲x86構建的,所以它不會加載它 - 就它而言它不存在,因爲x64不存在。使用「任何CPU」選項構建它。 – Aliostad 2010-09-24 13:50:00

3

你能證實你不是falling in this unfortunate scenario?如果這是這是不會被微軟修正了的情況下:

你需要一些類型爲裝配答:

public interface IInterface {} 

和類型在其他組件進行序列化

public class MyClass 
{ 
    public int Number; 
    public void Method<T>() where T : IInterface { } 
} 

現在,試着初始化XmlSerializer的

XmlSerializer ser = new XmlSerializer(typeof(MyClass)); 
+0

由於某些原因,我無法打開您發送的鏈接,您可以粘貼內容嗎? – 2010-09-24 13:43:08

+0

你發佈的測試代碼沒有問題 – 2010-09-24 13:46:09

+0

很高興你提到了這個五年的錯誤。剛剛嘗試了接口解決方法,現在沒有問題。 – Nicholi 2011-11-19 00:29:16

0

好像該解決方案是修復編輯一次我改變了所有我的隱式轉換爲明確的。

感謝您的幫助。