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

Jul*_*les 7 .net mshtml webbrowser-control internet-explorer-9

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

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

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

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

C:\ WINDOWS\SYSTEM32\Mshtml.dll中

从我可以从网上确定,我应该这样做来创建一个.NET互操作版本9:

d:\ zTemp> tlbimp mshtml.tlb /out:Microsoft.mshtml.dll/namespace:mshtml/asmversi on:9.0

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

TlbImp:警告TI3001:主互操作程序集'Microsoft.mshtml,Version = 7.0.3300.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'已经注册了类型库'C:\ Windows\system32\mshtml.tlb'.TLBIMP

:警告TI3016:类型库导入程序无法转换成员'mshtml._userBITMAP.pBuffer'的签名.TlbImp:

警告TI3016:类型库导入程序无法转换成员'mshtml._FLAGGED_BYTE_BLOB.abData'的签名.TlbImp:

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

  1. 这些警告可以安全地被忽略吗?
  2. 这个DLL的预编译版本是否可以从microsoft站点下载?
  3. 我可以用我的应用程序分发这个dll吗?
  4. 将dll的引用添加到.NET 3.5项目时,我收到以下警告:

'Microsoft.mshtml.dll'或其依赖项之一需要.Net Framework的更高版本而不是项目中指定的版本...

既然这是一个警告,让我以任何方式添加引用,我仍然可以使用.NET 3.5中的.dll的某些功能吗?

谢谢

Han*_*ant 4

这些都是 COM 版本控制的危险,又名 DLL Hell。您在 GAC 中安装的 PIA 是最小公分母,它使您的代码可以与任何版本的 IE 6 及更高版本一起使用。你的方法在其他方面是合理的。警告是真实的,您不能使用来自脚本语言或依赖 COM 自动化的任何其他客户端的标记成员。只要不使用它们就可以避免麻烦,这并不困难。

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

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

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