HyperDescriptor在.NET 4中构建时是否有效?

我正在开发一个.NET 4项目,并且能够从HyperDescriptor提供的动态属性访问中受益 ,但是当在.NET 4中构建时,它似乎无法正常工作。我从CodeProject下载了源代码,将解决方案的项目转换为VS2010,并将目标框架更新为4.0。 在构建并且示例正确执行时,时序显示使用HyperDescriptor进行动态属性访问是获取/设置对象值的最慢方式。

只有在使用.NET 4从源代码构建HyperDescriptor时,才会出现此问题。如果从.NET 4项目中添加对使用.NET 2构建的HyperDescriptor的引用,则可以正常工作。 这是目前可接受的解决方案,但是使用.NET 4构建会有一些潜在的优势吗? 任何人都想在HyperDescriptor上破解,看看为什么.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中的安全更改 。