2012-03-02 54 views
7

我想使用mshtml.dll 9.0版的一些新功能,例如IHTMLCSSRule。如何在.NET中添加对mshtml版本9的引用

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

C:\ Program Files文件\ Microsoft.NET \主互操作程序集\ Microsoft.mshtml.dll

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

C:\ WINDOWS \ SYSTEM32 \ Mshtml.dll的

从我能在网上确定,我应该这样做是为了创建一个.NET互操作版本9:

d:\ zTemp> TLBIMP MSHTML.tlb的/out:Microsoft.mshtml.dll /命名空间:MSHTML /asmversi上:9.0

这似乎已经工作,但产生以下警告:

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

:warning 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框架比项目 中指定的那个...

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

感谢

回答

4

这些是COM版本,又名DLL地狱的危险。您在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,您的程序将无法在用户的机器上运行。

相关问题