Windows 10上的MSHTML DLL

35
我有一个使用Smith Html Editor的C#解决方案(我正在开发使用此库的主要项目,因此我对此库不太了解),该库引用了MSHTML。在升级到Windows 10之前,这很好用,但现在找不到MSHTML了。我可以直接引用GAC文件夹中的DLL,它就不会再抱怨,也能编译,但会出现一些与编辑器未实例化相关的运行时错误。
经过一番调查,发现Windows 10已经淘汰了MSHTML,现在使用EdgeHTML。请问有人知道我如何绕过这个问题吗?
此解决方案仍适用于Windows 7。

你尝试过联系HTML控件的作者吗? - Mark Jansen
5
“逐步淘汰”并不准确,MSHTML在Win10中仍然被广泛使用。Winforms和WPF WebBrowser类依赖于它。COMReference在.csproj文件中没有明显的问题。请尝试使用虚拟项目,使用“项目”>“添加引用”>“浏览”按钮,选择c:\windows\system32\mshtml.tlb。如果失败了,那么您就知道可以在问题中记录的其他内容了。最少请提供精确的错误信息,并提到MSHTML引用的Path属性值。 - Hans Passant
如果我的回答有所帮助,如果您能将我的回答标记为正确,那就太好了。谢谢! - Malte Lantin
@Tyress 我们能在 Windows 10 UWP 应用中使用这个吗? - Kinjan Bhavsar
8个回答

53

我刚刚在博客上发布了关于这个问题的文章。问题是,全局程序集缓存中的Microsoft.mshtml.dll程序集在升级过程中从ActiveX中注销。为了解决此问题,需要对程序集运行"regasm"命令:

  1. 打开“VS2013开发人员命令提示符”(或者你正在使用的Visual Studio版本)。通过右键单击图标并选择“以管理员身份运行”来作为管理员运行。
  2. 导航到"C:\Windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a"。可能路径会有所不同。要验证,请转到"C:\Windows\assembly\GAC\Microsoft.mshtml"并键入"dir"。
  3. 一旦进入正确的路径,键入regasm Microsoft.mshtml.dll

5
更新至Windows 10(版本1607)后,我遇到了同样的问题。对我来说,这个解决方案很有效。谢谢! - Tintifax
我们遇到的问题是它根本没有在GAC中找到。我们通过手动创建所提到的文件夹结构,然后按照以下步骤操作使其正常工作。 - CSharpie
谢谢 - 在 Windows 10 更新后,这完全解决了我的问题! - bernhardrusch
1
我今天遇到了这个问题,在Windows 10秋季创作者更新后。你的解决方案非常有效! - jeanie77
1
谢谢,这个解决方案对我很有帮助,因为我已经升级到Windows 10,Ver 1803,OS Build 17134.81。 - sm2mafaz
在全新安装的Windows 11中,它根本不存在!需要使用@Chris的答案。您可以首先使用“gacutil.exe /l | find "Microsoft.mshtml"`搜索gac以进行确认。这最容易在Visual Studio命令提示符中运行。 - Simon_Weaver

10

太好了,Aron的解决方案非常棒!

在我的情况下,它是这样的:

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

(我将它们分开写在不同的行中,因为自动换行使得阅读变得混乱)。


1
Visual Studio 现在是 64 位的。截至 VS 2022,今天在 Windows 11 上的计算机上我在 C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\ide\PublicAssemblies 路径下找到了这个。 - Simon_Weaver

7

我曾经有同样的问题。添加 c:\windows\system32\mshtml.tlb 就可以解决了。注意,需要添加的不是dll文件,而是tlb文件。感谢你提出了这个问题,也非常感谢Hans提供的答案 :)


5
我遇到了同样的问题,我认为至少在我的情况下,这个项目最初是在Windows 7上使用VS2012创建的,并且引用了一个主互操作程序集。当我删除并重新添加对MSHTML的引用,并对文件进行比较时,唯一的区别是<WrapperTool>primary更改为tlbimp<EmbedInteropTypes>从false更改为true。
在某个时候,Visual Studio增加了将COM包装器直接嵌入程序集而不是引用PIA的功能,因此我猜测,在Windows 10上安装新的VS2015版本不再安装PIA,因为它们不是必需的。所以这就是为什么删除和重新添加引用可以解决问题,该项目应该继续在旧操作系统上正常构建。

移除MSHTML并重新添加它是解决方案。重新添加需要很长时间才能生效,请耐心等待! - Andrea Antonangeli
我刚刚删除了这个dll,发现没人在使用它。 :) - Boltyk
这个方法可行,将引用从MSHTML改为Microsoft.Mshtml。 - Ed Bayiates

4

如果以上方法都不能解决您的问题,这里提供一种我自己使用并与上述不同的解决方案:

我将microsoft.mshtml.dll文件注册到全局程序集缓存中。

以下是解决方案:

步骤1: 在Windows 10搜索框中键入dev,右键单击VSxxxx的开发人员命令提示符并以管理员身份运行。

步骤2: 转到您的microsoft.mshtml.dll库。 在我的情况下:

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

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

gacutil -i Microsoft.mshtml.dll

如需更多信息,请访问以下网络文章:https://learn.microsoft.com/en-us/dotnet/framework/app-domains/how-to-install-an-assembly-into-the-gac


谢谢!这个方法对我有用,而其他解决方案都没有起作用。 - twasbrillig

3

即使 Edge 是默认浏览器,MSHTML 仍然是 Windows 10 中的重要组件。您可以在 “C:\Windows\System32” 中找到它。引用官方 FAQ 上的说法:

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

MSHTML:

在 Windows 10 中,WebBrowser 控件将使用 Internet Explorer 的传统渲染引擎 mshtml.dll。此时 EdgeHTML 不可通过 WebBrowser 控件获得。

EdgeHtml

在为 Windows 10 构建的通用 Windows 应用程序中,WebView 控件使用 Microsoft EdgeHTML。针对 Windows 8 和 8.1 构建的应用程序中的 WebView 控件将继续加载 MSHTML 以保持兼容性。


2

在我的情况下,Microsoft.mshtml文件位于不同的目录中。在Visual Studio中,双击程序集引用,您会找到它的路径。现在打开 "VS2017 的 Developer Command Prompt",键入以下命令 cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies,然后运行 regasm Microsoft.mshtml.dll


1

在使用VS 2015时,我在最近的Windows 10更新后遇到了这个问题。我移除了“Microsoft HTML Object Library”的引用,并将其重新添加到项目中。在我的情况下,这解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接