Est-ce que le travail HyperDescriptor quand construit dans .NET 4?
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?
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.