8

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

仅当您使用 .NET 4 从源代码构建 HyperDescriptor 时才会出现此问题。如果从您的 .NET 4 项目中添加对使用 .NET 2 构建的 HyperDescriptor 的引用,它可以正常工作。目前这是一个可以接受的解决方案,但使用 .NET 4 构建会有一些潜在优势吗?任何人都想尝试一下 HyperDescriptor,看看为什么 .NET 4 构建速度如此之慢?

4

1 回答 1

13

我下载了源代码并使用 .NET 4 运行了测试。抛出和捕获的数量令人印象深刻InvalidOperationException,导致运行缓慢。

转到HyperTypeDescriptionProvider.BuildDescriptor并替换:

[ReflectionPermission(SecurityAction.Assert, Flags = ReflectionPermissionFlag.AllFlags)]

经过:

[SecuritySafeCritical]
[ReflectionPermission(SecurityAction.Assert, Unrestricted = true)]

AllFlags 已弃用,只会导致警告,但从安全透明方法断言在 .NET 4 中无效。有关详细信息,请参阅.NET Framework 4 中的安全更改

于 2010-06-23T21:59:00.743 回答