Тип, сериализованный в файле.resources, не совпадает с типом файла.resources
Мы обновили большой проект с.NET 3.5 до.NET 4.0. Все работает нормально, кроме ошибки загрузки ресурсов из ListView. Сейчас мы как раз перед выпуском, и это очень блокирует.
Это известная проблема Microsoft, например, здесь или здесь. Существует исправление для этой проблемы, но мы попробовали все доступные пакеты обновлений для.NET Framework 4.0, но ничего не помогло.
Мы попытались установить: KB2416472, KB2487367, KB2604121, KB2729449, KB2736428, KB2737019, KB2742595, KB2840628, KB2858302v2, KB2861188, KB2972106, KB2972215, KB2978125, KB2979575v2, KB3023221, KB3032662, KB3037578, KB3048074, KB3072309, KB3074547 - но без успеха.
Исправление должно быть в CLR в 4.0.30319.461 (ГДР).
Я также попытался изменить дизайнерский бит, чтобы заставить 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 ответ
Вы можете запустить.NET 4.5 на WinXP, если у вас установлен Service Pack 3 - есть две проблемы, которые официально не поддерживаются, и ваше приложение может содержать ошибки (не говоря уже о SP3, оно самостабилизирует системы) Но вы можете сказать, что ваше приложение имеет поддержку для Windows XP
Теперь из того, что я знаю и из того, что я прочитал, нет реальных решений для этого по вашим критериям (поддержка XP, установка localizable в true)
Мое предложение отказаться от поддержки устаревшей операционной системы.
Я столкнулся с подобной проблемой, когда разработал приложение в.NET 4.5, и для создания приложения с поддержкой XP я сделал копию проекта и собрал его с помощью.NET 3.5.
Извините, я не могу помочь с тем, что вы хотите, но, возможно, эта информация поможет вам!
Ура, Деметрия