Windows 10 上的 MSHTML DLL

MSHTML DLL on Windows 10

我有一个使用 Smith Html Editor 的 C# 解决方案(我正在开发使用它的主项目,所以我不太了解这个库),它引用了 MSHTML .在我升级到 Windows 10 并且它再也找不到 MSHTML 之前,它工作正常。我可以直接引用 GAC 文件夹中的 DLL,它停止抱怨并因此构建,但它会遇到一些与未实例化的编辑器相关的运行时错误。

经过一些研究后发现,MSHTML 已从 Windows 10 中淘汰,因为它现在使用 EdgeHTML。有谁知道我该如何解决这个问题?

该解决方案仍然适用于 Windows 7.

我遇到了完全相同的问题。添加 c:\windows\system32\mshtml.tlb 有效。请注意,它不是 dll,而是 tlb。非常感谢您提出这个问题并感谢 Hans 的回答:)

MSHTML 仍然是 Windows10 中的一个重要组件,即使将 Edge 作为默认浏览器也是如此。您可以在 "C:\Windows\System32" 中找到它。引用官方FAQ:

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

MSHTML:

In Windows 10 the WebBrowser control will use Internet Explorer’s legacy rendering engine, mshtml.dll. At this time EdgeHTML is not available through the WebBrowser control.

EdgeHtml

In Universal Windows Apps built for Windows 10, the WebView control use Microsoft EdgeHTML. WebView controls in apps built for Windows 8 & 8.1 will continue to load the MSHTML to preserve compatibility.

我遇到了同样的问题,我 认为 至少在我的情况下,该项目最初是 Windows 7 上的 VS2012 项目,并且安装了一个被引用的主要互操作程序集。当我删除并重新添加对 MSHTML 的引用并对文件进行比较时,唯一的区别是 <WrapperTool>primary 更改为 tlbimp<EmbedInteropTypes>已从 false 更改为 true。

在某些时候,Visual Studio 添加了将 COM 包装器直接嵌入程序集而不是引用 PIA 的功能,所以我猜测 Windows 10 上的新 VS2015 安装不再安装PIA,因为它们不是必需的。所以这就是为什么删除并重新添加引用可以解决问题,并且项目也应该继续在旧 OS 上正常构建。

我刚刚就此问题创建了一个 blog post。问题是全局程序集缓存中的 Microsoft.mshtml.dll 程序集在升级过程中从 ActiveX 中取消注册。要解决此问题,需要在程序集上 运行 "regasm":

  1. 打开 "Developer Command Prompt for VS2013" 的一个实例(或您碰巧使用的 Visual Studio 的任何版本)。 运行 以管理员身份右键单击该图标并选择 "Run as Administrator."
  2. 导航到 "C:\Windows\assembly\GAC\Microsoft.mshtml.0.3300.0__b03f5f7f11d50a3a." 您的路径可能会有所不同。要验证,请转到 "C:\Windows\assembly\GAC\Microsoft.mshtml" 并键入 "dir."
  3. 进入正确路径后,输入 regasm Microsoft.mshtml.dll

使用 VS 2015 我在上次 Windows 10 更新后遇到了这个问题。我删除了引用 "Microsoft HTML Object Library" 并将其再次添加到项目中。这解决了我的问题。

出于某种原因,在我的例子中,Microsoft.mshtml 文件位于不同的目录中。在 Visual Studio 上,双击程序集引用,您将找到它的路径。现在打开 "Developer Command Prompt for VS2017",键入以下内容 cd C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\Common7\IDE\PublicAssemblies。然后regasm Microsoft.mshtml.dll.

如果以上所有方法都不适合您,这是我的解决方案,它与上述不同,但对我有用:

我在全局程序集缓存中注册了 microsoft.mshtml.dll。

解决方法如下:

第 1 步: 通过在 windows 10 搜索框中键入 dev 打开开发人员命令提示符,然后右键单击开发人员命令提示符 for VSxxxx 和 运行 as administrator

第 2 步: 导航到您的 microsoft.mshtml.dll 图书馆。 就我而言:

CD C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\Common7\IDE\PublicAssemblies>

步骤 3 运行 在全局程序集缓存中注册以下命令:

gacutil -i Microsoft.mshtml.dll

有关详细信息,请访问此网络文章: https://docs.microsoft.com/en-us/dotnet/framework/app-domains/how-to-install-an-assembly-into-the-gac

伟大的解决方案阿伦!

在我的例子中是:

CD C:\Program Files (x86) [Enter]
CD Microsoft Visual Studio19 [Enter]
CD Community\Common7\IDE\PublicAssemblies [Enter]
gacutil -i Microsoft.mshtml.dll [Enter]
exit

(我把这些写在不同的行上,因为 word-wrap 读起来很混乱)。