سؤال

لدي تطبيق MVC 4 موجود يستخدم AspNetSqlProfileProvider، وتم تكوينه على النحو التالي:

<properties>
    <add name="MyTypeAs" 
         type="System.Collections.Generic.List`1[[My.Namespace.MyTypeA, My.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" serializeAs="Binary" />
</properties>

الآن أرغب في تحديث النظام (دون إزالة الملفات الشخصية القديمة) مثل هذا:

<properties>
    <add name="MyTypeAs" 
         type="System.Collections.Generic.List`1[[My.Namespace.MyTypeA, My.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" serializeAs="Binary" />
    <add name="MyHashOfInts" 
         type="System.Collections.Generic.HashSet`1[System.Int32]" serializeAs="Binary" />
</properties>

لم أواجه أي مشكلة في إضافة خصائص إضافية في المشاريع السابقة.إذا كانت البيانات التسلسلية من إصدار سابق حيث لم يتم تعريف الخاصية الإضافية ، فإن تحميل هذه الخاصية أسفر عن الافتراض (T).ومع ذلك، مع هذا التغيير، عندما تقوم وحدة التحكم الخاصة بي بتنفيذ هذا السطر:

List<MyTypeA> myTypeAs = 
     (List<MyTypeA>)HttpContext.Current.Profile.GetPropertyValue("MyTypeA");

تم طرح استثناء:

أدت محاولة تحميل نوع هذه الخاصية إلى حدوث الخطأ التالي:تعذر تحميل النوع "System.Collections.Generic.HashSet`1[System.Int32]".

لاحظ أنني أشير إلى خاصية من النوع List<MyTypeA> لكن الاستثناء يقول أنه لا يمكن تحميل النوع

System.Collections.Generic.HashSet`1[System.Int32].

هل أخطأت في كيفية تحديد النوع في web.config؟هل هناك سبب آخر؟

يحدث كل هذا في Visual Studio 2010 SP1 مع تحديد وقت تشغيل .NET 4.

هل كانت مفيدة؟

المحلول

وتبين أنه يختلف عن List<T>, HashSet<T> يتطلب اسم تجميع مؤهل بالكامل.

System.Collections.Generic.HashSet`1[[System.Int32]]، System.Core، الإصدار=4.0.0.0، Culture=محايد، PublicKeyToken=b77a5c561934e089

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top