今天看了个验证码识别的代码,其中引用到了mshtml.dll,找了半天原来就是microsoft.mshtml.dll。查这个dll的时候还发现了好几篇关于这个dll添加问题的文章。顺便看了下,原来这个dll有三个,添加引用时要注意了。
    第一篇文章:
    1.添加引用的问题
    一般在开发环境下会在三个地方存有microsoft.mshtml.dll文件。所以在添加引用时,也会出现三个看似一样的项。对于开发者来说,引用其中任何一个都不会影响到正常的开发。但问题会出在软件发布之后!在客户的机子上运行时,通常会提示文件的签名不正确,无法加载。
解决的方法就是删除现在对mshtml引用。重新选择正确引用。就是选最下面那个。路径是:X:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll 。把引用对话框拉大,可以看到文件的路径。
    2.类型选择错误
    如果问题一解决了,或者开始就选对了。可能客户机了上运行又报 System._ComObject 无法强制转换到 HtmlWIndow2Class 、HtmlDocumentClass或其它类似的错误。在开发者的机子上运行,却完全正常。这时通常我们会狂抓,完全不知是什么原因!在开发环境下用obj.toString()显示是HtmlXXXXClass在客户机上得到结果却是System._ComObject.解决方法很简单用HtmlXXXX替换HtmlXXXXClass即可。
     第二篇文章:
    也是用到了Microsoft mshtml.dll程序集,但是安装在用户电脑后,异常:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.IO.FileNotFoundException: 未能加载文件或程序集“Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。
解决方法如图,选择高亮的那个dll就可以了。


属性选择:
复制本地=True
特定版本=false;   
原因是:
因为 Microsoft.mshtmal.dll 这个 dll 是从 system32 文件夹下的 mshtml.tlb(COM 类型库文件)中导出的,因此我们只需要用 VS2008 自带的 TlbImp.exe COM 类型库导出工具将这个 tlb 文件再导一遍就可以了。

关于引用mshtml的问题的更多相关文章

  1. C# Webbrowser 常用方法及多线程调用

    设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...

  2. Delphi中用Webbrowser加载百度地图滚轮失效(ApplicationEvents里使用IsChild提前判断是哪个控件的消息)

    在Delphi中使用Webbrowser加载百度地图时,点击了其它界面,再回到百度地图中,即使点击了鼠标,再用滚轮也不能缩 放地图,除非点地图里面的自带的控件,之后才能缩放,原因是因为其它窗体控件获得 ...

  3. 关于Win8对getElementsByTagName等dom方法兼容性的替代方法

    在对Twebbrowser进行dom编程时,引用MSHTML并使用其中的HTMLDocument; IHTMLElementCollection;IHTMLElement;能获得较好的代码提示 其中封 ...

  4. C#彻底解决Web Browser 跨域读取Iframes内容

    C#彻底解决Web Browser 跨域读取Iframes内容 用C# winform的控件web browser 读取网页内容,分析一下数据,做一些采集工作. 如果是同一个域名下面还是好办的,基本上 ...

  5. delphi 获取webbrowser的cookies给Idhttp用

    网上方法一:(可获取,但不完全) 引用mshtml; IHTMLDocument(wb1.Document).cooke; 网上方法二:(获取不到!) 引用winnet,使用InternetGetCo ...

  6. delphi WebBrowser的使用方法详解(六)

    通篇引用mshtml; 一.webbrowser获取滚动条的位置 function GetScrollPositionX(FWB:TEmbeddedWB):Integer;     //水平滚动条位置 ...

  7. C# webbrowser全掌握(二)

    全篇引用单元mshtml; 路径:C:\windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.msh ...

  8. C# webbrowser遍历网页元素

    //不引用其他单元  foreach(HtmlElement ele in WB1.Document.All)                 {                   if(ele.I ...

  9. c# webBrowser全掌握

    一.获取网页源代码 1.不含有框架 string s=WB1.DocumentText;  //webbrowser1命名为WB1,下同 2.含有框架 引用mshtml;          //位置C ...

随机推荐

  1. thinkphp对数据库操作有哪些内置函数

    getModelName() 获取当前Model的名称 getTableName() 获取当前Model的数据表名称 switchModel(type,vars=array()) 动态切换模型 tab ...

  2. openstack安装、卸载与启动

    一.安装: 更新: sudo apt-get update sudo apt-get upgrade 安装图形化界面: sudo apt-get install ubuntu-desktop 安装gc ...

  3. 好项目烂架构的问题,四年coder的吐槽

    四年多码农,毕业后在一家小私企做前端:(初始asp.net,对oo有了比较深切的理解:处于对某空间的效仿,对前端技术架构理解的比较透彻): 在这家公司混了4个月之后跳出来想自己单干: 自己接了个小项目 ...

  4. Careercup - Facebook面试题 - 4922014007558144

    2014-05-01 02:13 题目链接 原题: Design question: Say you have hacked in to a network and can deploy your b ...

  5. SQL获取数据库名,表名,列名,说明等信息

    由于最近工作涉及SQL语句较多,对一些不常见的SQL函数.及存储过程下面进行整理和描述,供大家分享: /************************************************ ...

  6. Codeforces Round #311 (Div. 2) D. Vitaly and Cycle 奇环

    题目链接: 点这里 题目 D. Vitaly and Cycle time limit per test1 second memory limit per test256 megabytes inpu ...

  7. 【BZOJ】【2820】YY的GCD

    莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...

  8. NYOJ-733 万圣节派对 AC 分类: NYOJ 2014-01-02 00:41 303人阅读 评论(0) 收藏

    #include <stdio.h> #include <math.h> int main() { int t, a, b, i, j, n; scanf("%d&q ...

  9. SQL Server 导数据 Oracle

    1. 使用Sql Server的企业管理器导入(推荐) 优点: 可以指定导入的表. 缺点: 转成Oracle时, 对应的数据类型要一个一个手动修改   2.使用ORACLE官方提供的Sql Devel ...

  10. vs2010中臃肿的ipch和sdf文件

    使用VS2010建立C++解决方案时,会生成SolutionName.sdf和一个叫做ipch的文件夹,这两个文件再加上*.pch等文件使得工程变得非常的庞大,一个简单的程序都会占用几十M的硬盘容量, ...