如何在.NET中添加对mshtml版本9的引用
我想使用mshtml.dll 9.0版的一些新功能,如IHTMLCSSRule。
以下文件夹中的互操作版本是7.0.3300.1版本:
C: Program Files Microsoft.NET Primary Interop程序集 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,版本= 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
'Microsoft.mshtml.dll'或其某个依赖项需要比项目中指定的更高版本的.Net Framework ...
既然这是一个警告,并且让我以任何方式添加引用,我仍然可以使用.NET 3.5中的某些.dll功能吗?
谢谢
这些是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时,你的程序将无法在用户的机器上运行。
链接地址: http://www.djcxy.com/p/57999.html