0

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

这是 Microsoft 的一个已知问题,例如此处此处。此问题有一个修补程序,但我们尝试了所有可用的 .NET Framework 4.0 服务包,但没有任何效果。

We tried to install: KB2416472, KB2487367, KB2604121, KB2729449, KB2736428, KB2737019, KB2742595, KB2840628, KB2858302v2, KB2861188, KB2972106, KB2972215, KB2978125, KB2979575v2, KB3023221, KB3032662, KB3037578, KB3048074, KB3072309, KB3074547 - but without success.

修复程序应在 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)
4

1 回答 1

0

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

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

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

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

对不起,我真的不能帮助你想要什么,但也许这些信息会对你有所帮助!

干杯,德米特

于 2015-11-25T20:03:11.720 回答