Question

Je travaille sur un projet .NET 4, et serait en mesure de bénéficier de l'accès à la propriété de dynamique HyperDescriptor offre, mais il ne semble pas fonctionner correctement lors de sa construction dans .NET 4. J'ai téléchargé la source de CodeProject, converti la solution à un projet VS2010, et mis à jour le cadre cible 4.0. Bien qu'il construit, et l'échantillon correctement exécute, les timings montrent que l'accès de la propriété dynamique avec HyperDescriptor est plus lent façon possible d'obtenir / définir des valeurs d'objet.

Ce problème est que lorsque vous construisez HyperDescriptor de la source avec .NET 4. Si de votre projet .NET 4, vous ajoutez une référence à HyperDescriptor construit avec 2 .NET, il fonctionne très bien. Ceci est une solution acceptable pour l'instant, mais y aurait-il un avantage potentiel à utiliser une version .NET 4? Tout le monde veut prendre une fissure à HyperDescriptor, voir pourquoi il est si lent avec une version .NET 4?

Était-ce utile?

La solution

J'ai téléchargé le code source et a couru le test avec 4. .NET Il y a un nombre impressionnant de InvalidOperationException jeté et pris, ce qui provoque la lenteur.

Aller à HyperTypeDescriptionProvider.BuildDescriptor et remplacer:

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

par:

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

AllFlags est dépréciée et provoque seulement un avertissement, mais l'affirmation d'une méthode transparente de sécurité est pas valable dans .NET 4. Voir changements concernant la sécurité dans le .NET Framework 4 pour plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top