2013-02-20 67 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文件的目录。如果目标机器上没有必要的库,它应该会有所帮助。

相关问题