.resources文件中序列化的类型与.resources文件所包含的类型不同

时间:2015-11-16 16:18:59

标签: listview .net-4.0 badimageformatexception

我们已将一个大型项目从.NET 3.5升级到.NET 4.0。除了从ListView加载资源的错误外,一切正常。现在我们刚刚发布,这是一个非常阻碍。

这是Microsoft已知的问题,例如herehere。此问题有hotfix,但我们尝试了.NET Framework 4.0的所有可用Service Pack,但没有任何效果。

我们尝试安装:KB2416472,KB2487367,KB2604121,KB2729449,KB2736428, KB2737019,KB2742595,KB2840628,KB2858302v2,KB2861188,KB2972106,KB2972215, KB2978125,KB2979575v2,KB3023221,KB3032662,KB3037578,KB3048074,KB3072309,KB3074547 - 但没有成功。

修复应该在4.0.30319.461(GDR)的CLR中。

我还尝试更改设计器位,强制Visual Studio将其更改为.NET 4格式。它没有帮助。

如何解决此问题的唯一方法是安装.NET Framework 4.5.2。但我们不想放弃对Windows XP的支持。

另一种解决方案是将所有此类用户控件的 Localizable 属性设置为false。这对我来说似乎很多工作,我们希望保持本地化。这够了吗?我们无法在合理的时间内发布之前测试所有控件和场景。

有一些真正的解决方案吗?是否有一些服务包?

我不想相信.NET Framework 4.0不稳定。这个Winform控件是.NET的基本功能!

CLR Excepton: System.BadImageFormatException: The type serialized in the .resources file was not the same type that the .resources file said it contained. Expected 'System.Windows.Forms.ListViewItem' but read 'System.Windows.Forms.ListViewItem+ListViewSubItem'.
   at System.Resources.ResourceReader.TypeLimitingDeserializationBinder.BindToType(String assemblyName, String typeName)
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Bind(String assemblyString, String typeString)
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)
   at System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)
   at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
   at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
   at System.Resources.ResourceReader.DeserializeObject(Int32 typeIndex)
   at System.Resources.ResourceReader._LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
   at System.Resources.ResourceReader.LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
   at System.Resources.ResourceReader.LoadObject(Int32 pos)
   at System.Resources.ResourceReader.ResourceEnumerator.get_Entry()
   at System.Resources.ResourceReader.ResourceEnumerator.get_Current()
   at System.ComponentModel.ComponentResourceManager.FillResources(CultureInfo culture, ResourceSet& resourceSet)
   at System.ComponentModel.ComponentResourceManager.FillResources(CultureInfo culture, ResourceSet& resourceSet)
   at System.ComponentModel.ComponentResourceManager.ApplyResources(Object value, String objectName, CultureInfo culture)

1 个答案:

答案 0 :(得分:0)

如果安装了Service Pack 3,则可以在WinXP上运行.NET 4.5 - 有两个问题没有得到官方支持,你的应用程序可能有问题 (更不用说SP3它自我解除稳定系统) 但是你可以说你的应用程序支持Windows XP

现在根据我的知识和我所读到的内容,根据您的标准(XP支持,将localizable设置为true),没有真正的解决方案。

我的建议是放弃对过时操作系统的支持。

我遇到了一个类似的问题,我在.NET 4.5中开发了一个应用程序并构建了支持XP的应用程序我制作了一个项目副本并使用.NET 3.5构建它。

抱歉,我无法真正帮助你想要什么 但也许这些信息可以帮到你!

干杯, Demetry