Windows 10上的MSHTML DLL

时间:2015-08-06 10:43:26

标签: c# wpf windows-10 mshtml microsoft-edge

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

经过一番研究后发现MSHTML已逐步退出Windows 10,因为它现在使用的是EdgeHTML。有谁知道我怎么能绕过这个?

该解决方案仍适用于Windows 7。

8 个答案:

答案 0 :(得分:36)

我刚刚在这个问题上创建了一个blog post。问题是全局程序集缓存中的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. 进入正确的路径后,请键入//Data to match $dbverified = //Get the database verified column value $urlstatus = //url value you sent with email same as database data you update. //Email to match $urlemail = //decode url email $dbemail = //Get user email from db if($$dbverified == $urlstatus && $urlemail == $dbemail){ echo 'E-mail verified'; }else{ echo 'E-mail cannot be verified'; }

答案 1 :(得分:7)

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

答案 2 :(得分:4)

我有同样的问题而我认为正在发生什么,至少在我的情况下,该项目最初是Windows 7上的VS2012项目,并且安装了一个主要的互操作程序集引用。当我删除并重新添加对MSHTML的引用并对文件执行差异时,唯一的区别是<WrapperTool>已从primary更改为tlbimp<EmbedInteropTypes>从虚假变为真。

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

答案 3 :(得分:3)

即使将Edge作为默认浏览器,MSHTML仍然是Windows 10中的重要组件。您可以在“C:\ Windows \ System32”中找到它。引用官方常见问题解答:

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和Windows的应用程序中的WebView控件   8.1将继续加载MSHTML以保持兼容性。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

由于某些原因,Microsoft.mshtml文件位于其他目录中。在Visual Studio上,双击程序集引用,您将找到它的路径。现在打开“ VS2017开发人员命令提示符”,键入以下cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies。然后regasm Microsoft.mshtml.dll

答案 6 :(得分:1)

如果上述所有方法都无法满足您的需要,这是我的解决方案,与上面的方法有所不同,并且对我有用:

我在全局程序集缓存中注册了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>

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

gacutil -i Microsoft.mshtml.dll

有关更多信息,请访问以下Web文章: https://docs.microsoft.com/en-us/dotnet/framework/app-domains/how-to-install-an-assembly-into-the-gac

答案 7 :(得分:0)

伟大的解决方案,阿隆!

在我的情况下是:

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

(由于自动换行使阅读变得混乱,因此我在单独的行上写下了这些内容。)