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 のサポートを中止したくはありません。

もう 1 つの解決策は、そのようなすべてのユーザー コントロールの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