如何在.NET中添加对mshtml版本9的引用

如何在.NET中添加对mshtml版本9的引用,.net,internet-explorer-9,webbrowser-control,mshtml,.net,Internet Explorer 9,Webbrowser Control,Mshtml,我想使用mshtml.dll 9.0版的一些新功能,如IHTMLCSSRule 以下文件夹中的互操作版本为7.0.3300.1版: C:\Program Files\Microsoft.NET\Primary Interop Assembly\Microsoft.mshtml.dll 以下文件夹中的COM版本为9.0.8112.16441版本: C:\Windows\System32\mshtml.dll 根据我从web上了解到的情况,我应该这样做来创建.NET interop版本9: d:\z

我想使用mshtml.dll 9.0版的一些新功能,如IHTMLCSSRule

以下文件夹中的互操作版本为7.0.3300.1版:

C:\Program Files\Microsoft.NET\Primary Interop Assembly\Microsoft.mshtml.dll

以下文件夹中的COM版本为9.0.8112.16441版本:

C:\Windows\System32\mshtml.dll

根据我从web上了解到的情况,我应该这样做来创建.NET interop版本9:

d:\zTemp>tlbimp mshtml.tlb/out:Microsoft.mshtml.dll/命名空间:mshtml /ASMversion:9.0

这似乎有效,但产生了以下警告:

TlbImp:警告TI3001:主互操作程序集'Microsoft.mshtml, 版本=7。 0.3300.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a已为类型库“C:\Windows\system32\mshtml.tlb”注册。TlbImp

:警告TI3016:类型库导入程序无法转换 成员“mshtml.\u userBITMAP.pBuffer”的签名。TlbImp:

警告TI3016:类型库导入程序无法转换 成员“mshtml.\u标记的\u字节\u BLOB.abData”的签名。TlbImp:

警告TI3015:的至少一个参数 无法封送'mshtml.ICanvasPixel ArrayData.GetBufferPointer' 由运行时封送处理程序执行。因此,这些论据将作为 指针,可能需要不安全的代码来操作。TlbImp:类型 已导入到d:\zTemp\Microsoft.mshtml.dll的库

  • 可以安全地忽略这些警告吗
  • 是否没有此dll的预编译版本可从microsoft站点下载
  • 我可以将此dll与我的应用程序一起分发吗
  • 向.NET 3.5项目添加对dll的引用时,我收到以下警告:
  • “Microsoft.mshtml.dll”或其依赖项之一需要更高版本 .Net Framework的版本比项目中指定的版本高

    由于这是一个警告,并且允许我以任何方式添加引用,我仍然可以使用.NET3.5中.dll的某些功能吗


    谢谢

    这些都是COM版本控制的危害,也就是DLL地狱。您在GAC中安装的PIA是最低的公分母,它使您的代码能够与任何版本的IE6及更高版本协同工作。你的方法是正确的。警告是真实的,您不能使用来自脚本语言或任何其他依赖COM自动化的客户端的标记成员。你只要不使用它们就可以避免麻烦,这并不困难

    添加引用时出现错误,因为使用了错误版本的Tlbimp.exe。从错误消息判断,可能是.NET4版本。3.5兼容版本位于c:\program files\microsoft SDK\windows\v6.0a\bin中。否则,您将在使用VS2008命令提示符时得到一个。在命令提示下键入
    where tlbimp.exe
    进行验证

    可能会加载PIA而不是自定义互操作程序集。不确定,您可以通过配置为记录所有绑定的Fuslogvw.exe来判断。你的/ASM版本应该避免它。最好创建一个完全伪造的版本号,这样它就永远不会匹配PIA版本,比如1.0.0.0

    当然,如果没有安装IE9,您的程序将无法在用户的机器上运行