Работает ли Hyperdescriptor при встроенном .NET 4?
Вопрос
Я работаю над проектом .net 4 и смогу извлечь выгоду из доступа к динамическому имуществу, который Гипердескриптор Обеспечивает, но, похоже, он не работает должным образом при встроенном .NET 4. Я загрузил источник из CodeProject, преобразовал решение в проектах в VS2010 и обновил целевую структуру до 4.0. Пока он строится, и образец выполняется правильно, время показывает, что динамический доступ к свойствам с помощью гипердескрасира - это медленный Возможный способ получить/настройку значений объекта.
Эта проблема заключается только в том, что вы создаете гипердеспиритор из Source с .NET 4. Если из вашего проекта .NET 4 вы добавляете ссылку на Hyperdescriptor, построенный с .NET 2, он работает нормально. Это приемлемое решение на данный момент, но будет ли какое -то потенциальное преимущество для использования сборки .NET 4? Кто -нибудь хочет взломать гипердеспиритор, понимаете, почему он такой медленный со сборкой .NET 4?
Решение
Я скачал исходный код и запустил тест с .net 4. Есть впечатляющее количество InvalidOperationException
бросил и поймал, вызывая медлительность.
Идти к HyperTypeDescriptionProvider.BuildDescriptor
и заменить:
[ReflectionPermission(SecurityAction.Assert, Flags = ReflectionPermissionFlag.AllFlags)]
по:
[SecuritySafeCritical]
[ReflectionPermission(SecurityAction.Assert, Unrestricted = true)]
Allflags устарел и только вызывает предупреждение, но утверждение от прозрачного метода безопасности недопустимо в .net 4. См. Изменения безопасности в .NET Framework 4 за дополнительной информацией.