我在Windows 7中使用IE11。 然后我在C#project c:\ Windows \ System32 \ mshtml.tld 中添加了一个引用,并尝试获取mshtml.IHTMLDocument6或mshtml.IHTMLDocument7,但VS2013没有看到它。 我只能得到mshtml.IHTMLDocument,mshtml.IHTMLDocument2 .. mshtml.IHTMLDocument5。
IHTMLDocument7 interface https://msdn.microsoft.com/ru-ru/library/windows/hardware/ff975572
答案 0 :(得分:5)
选择MSHTML程序集引用,查看其Path属性,您将看到问题:
C:\ Windows \组件\ GAC \ Microsoft.mshtml \ 7.0.3300.0__b03f5f7f11d50a3a \ Microsoft.mshtml.dll
这是mshtml类型库的PIA,安装在安装了VS的任何程序员的机器上。版本7.0.3300是.NET 1.0时代的版本号,已有14年历史。当然,预测IE11,这就是为什么它没有后来的接口类型。使用PIA永远不是错误的事情,它确保您的程序可以运行任何版本的IE,一直回到IE6。
但这不是你想要的,你必须从IE11类型库生成自己的互操作库。运行Visual Studio命令提示符,导航到项目目录并键入以下命令:
Tlbimp c:\windows\system32\mshtml.tlb /out:Interop.mshtml.dll
它会拖延很长一段时间,它是一个很大的问题,并且会发出几个关于PIA存在的警告以及几个不能直接从.NET程序中使用的模糊方法和类型。你可以忽略它们,它们也没有在PIA中工作。
您现在在项目目录中有Interop.mshtml.dll文件。返回VS,删除旧的MSHTML参考并使用Project>添加参考>浏览以选择刚刚创建的新组件。它的嵌入式互操作类型"默认情况下,属性为True,根本不再需要PIA,您也不必在程序中部署文件。将文件检入源代码管理中,这样您只需执行一次。
请注意,当程序在没有安装所需IE版本的计算机上运行时,程序可能会因E_NOINTERFACE异常而死亡。您可以使用as
运算符将文档引用强制转换为IHtmlDocument7,如果IE已旧,它将为null。