هل يعمل HyperDescriptor عندما يكون في .NET 4؟
سؤال
أنا أعمل على مشروع .NET 4 ، وسأكون قادرًا على الاستفادة من الوصول إلى الممتلكات الديناميكية HyperDescriptor يوفر ، ولكن لا يبدو أنه يعمل بشكل صحيح عند تضمينه .NET 4. لقد قمت بتنزيل المصدر من CodeProject ، وحولت الحل إلى المشاريع إلى VS2010 ، وتحديث الإطار الهدف إلى 4.0. أثناء تبنيه ، ويتم تنفيذ العينة بشكل صحيح ، تُظهر التوقيت أن الوصول الديناميكي للخاصية مع HyperDescriptor هو أبطأ طريقة ممكنة للحصول على قيم الكائن/ضبط.
هذه المشكلة هي فقط عندما تقوم ببناء HyperDescriptor من المصدر باستخدام .NET 4. إذا كنت من مشروع .NET 4 الخاص بك ، يمكنك إضافة إشارة إلى HyperDescriptor المصممة باستخدام .NET 2 ، فهو يعمل بشكل جيد. هذا حل مقبول في الوقت الحالي ، ولكن هل سيكون هناك بعض المزايا المحتملة لاستخدام بناء .NET 4؟ أي شخص يريد أن يأخذ صدعًا في Hyperdscriptor ، انظر لماذا يكون بطيئًا جدًا مع بناء .NET 4؟
المحلول
لقد قمت بتنزيل الكود المصدري وقمت بإجراء الاختبار باستخدام .NET 4. هناك عدد مثير للإعجاب InvalidOperationException
ألقيت واشتعلت ، مما تسبب في بطء.
اذهب إلى HyperTypeDescriptionProvider.BuildDescriptor
واستبدل:
[ReflectionPermission(SecurityAction.Assert, Flags = ReflectionPermissionFlag.AllFlags)]
بواسطة:
[SecuritySafeCritical]
[ReflectionPermission(SecurityAction.Assert, Unrestricted = true)]
تم إهمال allflags ويؤدي فقط إلى تحذير ، ولكن التأكيد من طريقة شفافة أمنية ليست صالحة في .NET 4. انظر التغييرات الأمنية في إطار .NET 4 للمزيد من المعلومات.