web-dev-qa-db-fra.com

MSHTML DLL sur Windows 10

J'ai une solution C # qui utilise Smith Html Editor (je développe sur le projet principal qui l'utilise, donc je ne connais pas grand chose à propos de cette bibliothèque), qui fait référence à MSHTML. Cela a bien fonctionné jusqu'à ma mise à niveau vers Windows 10 et il ne peut plus trouver MSHTML. Je peux faire directement référence à la DLL dans le dossier GAC. Il cesse de se plaindre et génère donc, mais certaines erreurs d'exécution liées à l'éditeur ne sont pas instanciées.

Après quelques recherches, il s'avère que MSHTML est progressivement supprimé de Windows 10 car il utilise maintenant EdgeHTML. Quelqu'un a-t-il une idée de la façon dont je peux contourner cela? 

La solution fonctionne toujours pour Windows 7.

22
Tyress

Je viens de créer un blog post sur ce sujet. Le problème est que l'assembly Microsoft.mshtml.dll dans le Global Assembly Cache n'est plus enregistré auprès d'ActiveX pendant le processus de mise à niveau. Pour résoudre ce problème, il est nécessaire d'exécuter "regasm" sur l'assembly:

  1. Ouvrez une instance de «l'invite de commande du développeur pour VS2013» (ou toute version de Visual Studio que vous utilisez). Exécutez-le en tant qu'administrateur en cliquant avec le bouton droit de la souris sur l'icône et en sélectionnant "Exécuter en tant qu'administrateur".
  2. Accédez à "C:\Windows\Assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a." Il est possible que votre chemin varie. Pour vérifier, accédez à "C:\Windows\Assembly\GAC\Microsoft.mshtml" et tapez "dir".
  3. Une fois que vous êtes dans le bon chemin, tapez regasm Microsoft.mshtml.dll
35
user1233749

J'ai eu exactement le même problème. L'ajout du fichier c:\windows\system32\mshtml.tlb a fonctionné. Notez que ce n'est pas la dll, mais le tlb. Merci beaucoup d'avoir posé cette question et merci Hans pour la réponse :)

7

J'avais le même problème et (pense} _ que se passe-t-il, du moins dans mon cas, c'est que le projet était à l'origine un projet VS2012 sur Windows 7 et qu'un assemblage d'interopérabilité primaire a été référencé. Lorsque j'ai supprimé et rajouté la référence à MSHTML et effectué un diff sur les fichiers, la seule différence était que le <WrapperTool> était passé de primary à tlbimp et que <EmbedInteropTypes> était passé de false à true.

À un moment donné, Visual Studio a ajouté la possibilité d’incorporer les wrappers COM directement dans l’Assembly au lieu de faire référence à des PIA. J’imagine donc qu’une nouvelle installation VS2015 sur Windows 10 n’installe plus les PIA car elles ne sont plus nécessaires. C’est la raison pour laquelle supprimer et rajouter la référence corrige le problème et que le projet devrait continuer à bien fonctionner sur les anciens systèmes d’exploitation.

4
Josh

MSHTML est toujours un composant important de Windows 10, même avec Edge comme navigateur par défaut. Vous pouvez le trouver dans "C:\Windows\System32". Pour citer la FAQ officielle:

http://dev.modern.ie/platform/faq/will-the-webbrowser-control-work-with-mi

MSHTML:

Dans Windows 10, le contrôle WebBrowser utilisera le .__ d'Internet Explorer. moteur de rendu hérité, mshtml.dll. Actuellement, EdgeHTML n’est pas disponible via le contrôle WebBrowser.

EdgeHtml

Dans les applications Windows universelles conçues pour Windows 10, le contrôle WebView utilisez Microsoft EdgeHTML. Contrôles WebView dans les applications conçues pour Windows 8 et 8.1 continuera à charger le MSHTML pour préserver la compatibilité.

3
Malte Lantin

Pour une raison quelconque dans mon cas, le fichier Microsoft.mshtml était situé dans un autre répertoire. Sur Visual Studio, double-cliquez sur la référence Assembly et vous y trouverez le chemin. Ouvrez maintenant «l'invite de commande du développeur pour VS2017», tapez le cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies suivant. Puis regasm Microsoft.mshtml.dll.

1
Helder Pinto

En utilisant VS 2015, j'ai eu ce problème après la dernière mise à jour de Windows 10. J'ai supprimé la référence "Bibliothèque d'objets Microsoft HTML" et l'ai ajoutée à nouveau au projet. Cela a résolu le problème dans mon cas.

1
Wolf