2010-07-26 3 views
4

J'ai une application héritée où il y a un UserControl qui est utilisé comme ActiveX dans une page Web chargée dans IE. Avant .NET 4.0, il y avait des politiques de sécurité et une console MMC pour créer des groupes de code, etc. Il semble que tout cela est parti avec .NET 4.0. Je me demandais si quelqu'un pouvait me donner des indices sur la façon de mettre à jour mon projet UserControl pour qu'il fonctionne avec .NET 4.0. J'ai fait des tests et aucun d'entre eux ne semble fonctionner. En fait, j'ai remarqué que si je mettais à jour la version .NET de mon UserControl à 4.0 avant de le compiler, il ne serait même pas ajouté à la zone de téléchargement du GAC. Il est téléchargé (utilisé pour tester le fiddler) mais il n'est simplement pas ajouté à la zone de téléchargement du GAC. Définir la version de la plate-forme .NET à 3.5 ou moins signifie que la DLL est ajoutée au GAC mais qu'elle est inutilisable depuis la page Web (l'ancien code JS qui a fonctionné avant ne peut pas trouver trouver le membre X sur l'objet Y). Alors, est-ce que quelqu'un peut me diriger vers la bonne direction? Que dois-je faire dans .NET 4.0 pour charger un UserControl .NET dans Internet Explorer?Chargement .NET UserControls dans IE avec .NET 4.0

merci.

+0

BTW, vous savez qu'il existe un nouveau GAC pour les assemblages 4.0, n'est-ce pas? – Will

+0

Juste un détail de plus: les contrôles utilisateur peuvent encore être chargés mais ils doivent être compilés en 3.5 car IEhost a été déprécié par MS. Avec cette information, j'ai été capable de construire un projet simple, alors maintenant je vais essayer de le faire fonctionner. –

+0

Oui, mais vous ne savez toujours pas comment demander des privilèges ... par exemple, comment configurer le composant pour qu'il puisse continuer à utiliser interop pour imprimer quelque chose sur une imprimante? –

Répondre

8

Les contrôles d'hébergement dans IE sont désormais bloqués par défaut (à partir de v4 ou v4.5). Voir MSDN article sous "Applications Web".

Heureusement, il est très facile de réactiver la fonctionnalité avec ces touches reg:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework] 
"EnableIEHosting"=dword:00000001 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework] 
"EnableIEHosting"=dword:00000001 

La clé de 64 bits a été celui qui m'a fixé pour, en cours d'exécution IE8 (x32) sur Win7 (x64) en utilisant un contrôle .Net v3.5 SP1 compilé pour x32.

0

Ok, après plusieurs tests, j'ai réussi à le faire fonctionner. Voici quelques éléments que vous devez garder à l'esprit:

  • Vous ne pouvez pas compiler votre assembly avec .NET 4.0 car IEHost était obsolète dans .NET 4.0. Ainsi, vous devrez compiler contre .NET 3.5
  • Puisque vous compilez contre .NET 3.5, ne pas oublier de définir les politiques de sécurité correctes dans la console de configuration .NET 2.0

Et, la chose la plus importante de toutes: n'oubliez pas de définir les politiques dans la bonne version de .NET. Dans mon cas, je cours sur une machine x64 et donc je suis allé de l'avant et installé la version x64 bits. définir les bonnes politiques dans la console installée ne fonctionnait pas vraiment, j'ai donc dû télécharger et installer la version x86. Après cela, tout a commencé à bien fonctionner (après tout, IE fonctionnait comme une application 32 bits)

Encore une fois, je ne peux pas vraiment comprendre la décision de Microsoft de déprécier IEHost sans introduire une nouvelle option.