我们已将一个大型项目从.NET 3.5升级到.NET 4.0。除了从ListView加载资源的错误外,一切正常。现在我们刚刚发布,这是一个非常阻碍。
这是Microsoft已知的问题,例如here或here。此问题有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)
答案 0 :(得分:0)
如果安装了Service Pack 3,则可以在WinXP上运行.NET 4.5 - 有两个问题没有得到官方支持,你的应用程序可能有问题 (更不用说SP3它自我解除稳定系统) 但是你可以说你的应用程序支持Windows XP
现在根据我的知识和我所读到的内容,根据您的标准(XP支持,将localizable设置为true),没有真正的解决方案。
我的建议是放弃对过时操作系统的支持。
我遇到了一个类似的问题,我在.NET 4.5中开发了一个应用程序并构建了支持XP的应用程序我制作了一个项目副本并使用.NET 3.5构建它。
抱歉,我无法真正帮助你想要什么 但也许这些信息可以帮到你!
干杯, Demetry