2013-02-20 68 views
2

我使用此函數在xml文件中序列化一個對象集合。列表<Object>序列化在dev計算機上工作,但在其他計算機上失敗

public void SerializeEnvironment() 
    {    
      if (xs == null) xs = new XmlSerializer(typeof(IList<Classes.Environment>)); 

      using (StreamWriter wr = new StreamWriter(ConfigFilePath)) 
       xs.Serialize(wr, Environments);    
    } 

該程序在我的開發機器上完美工作。

System.InvalidCastException: [A] System.Collections.Generic.List 1[Product] cannot be cast to [B]System.Collections.Generic.List 1 [產品]但是,當我讓其他計算機上的部署,該方案對序列化方法與此錯誤失敗。 類型A來自位於'C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4'上下文'LoadNeither'中的'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' .0.0.0__b77a5c561934e089 \ mscorlib.dll中」。 類型B來自位於'C:\ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4'上下文'LoadNeither'中的'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' .0.0.0__b77a5c561934e089 \ mscorlib.dll中」。 在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write3_ArrayOfEnvironment(對象o)

我測試很多事情要解決,但沒有成功。 預先感謝任何建議或解決方案:)

此外,在這裏我的對象類:

[Serializable] 
public class Environment 
{ 
    public string name { get; set; } 
    public string value { get; set; } 
    public Environment(){} 
    public Environment(string Name, string Value) 
    { 
     name = Name; 
     value = Value; 
    } 
} 
+1

錯誤可以翻譯成英文嗎? – 2013-02-20 15:56:55

+0

我認爲這只是意味着你沒有在你試過的計算機上安裝.net 4.0程序集,但它失敗了。由於它在GAC或任何地方找不到組件。 – dutzu 2013-02-20 15:57:06

+0

.net 4.0框架安裝在另一臺機器上。我檢查了這一點 – mdelpeix 2013-02-20 15:59:32

回答

2

瞎猜,但您的開發機器的64位?如果是這樣,請嘗試爲x86編譯項目。您可以通過在解決方案資源管理器中右鍵單擊您的項目並轉到屬性來執行此操作。點擊Build選項卡,將Platform Target選項從「Any CPU」/「x64」更改爲「x86」。構建您的解決方案並重新部署以再試一次。

+0

我在x86上,就像其他計算機 – mdelpeix 2013-02-20 16:30:45

+0

@boulatin並且Platform Target設置爲Any CPU或x86? – DiskJunky 2013-02-20 16:33:34

+0

我爲x86平臺編譯,它的工作原理,非常感謝! – mdelpeix 2013-02-21 10:52:49

0

我相信你的測試機器沒有使用與你的版本相同的.net版本。如果測試機器沒有.net 4.0安裝它...如果測試機器運行的是Windows XP,並且您的版本位於.net 4.5中,則需要將程序降級到.net 4.0。

1

儘量選擇solution explorer你引用和Properties窗口設置其Copy local屬性true,所以他們會被複制到與編譯後的可執行文件或DLL文件的目錄。如果目標機器上沒有必要的庫,它應該會有所幫助。

相關問題