visual-studio - 如何在 Visual Studio/Internet Explorer 中调试 C# BHO 项目

标签 visual-studio internet-explorer visual-studio-2010 bho

我正在使用 Visual Studio 2010 在 C# 中创建 IE 扩展。如何在 Internet Explorer 中运行扩展时调试它?

最佳答案

有几件事非常引人注目:

  • 这个问题被问了很多
  • 大多数答案(如果不是全部)都不完整或不正确

  • 所以这里是:在VS2010中。执行以下操作:
  • 创建您的 BHO 项目,一个好的起点是:Demo IE Toolbar/BHO
  • 创建一个类似的解决方案/项目,转到“解决方案资源管理器”,右键单击您的项目或使用 Alt+Enter 并转到“属性”:

  • Project properties
  • 确保选择了调试配置文件:

  • Debug Profile
  • 我们需要一些构建后事件来注册我们的程序集:

  • Defining post build events

    这些是不同的命令:
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe" /u "$(TargetName)"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe" /f /i "$(TargetPath)"
    "C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /unregister /codebase "$(TargetPath)"
    "C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /codebase "$(TargetPath)"
    

    顺序很重要。首先将程序集取消注册,然后注册。第一次运行时,构建将失败,因为这些构建后事件将失败。这是正常的,第一次构建时,没有注册程序集,因此没有什么可以取消注册。第二次构建时,一切都会正常进行。在这个阶段,在成功、无错误的构建之后,手动启动 IE 应该会导致你的 BHO 可见:

    Check BHO registered

    Check BHO registered II
  • 现在我们也希望能够按 F5 , 完成整个构建,打开 IE 并附加调试器。然而,与流行的看法相反,VS 2010 调试器不会自己附加,即使在“调试”中定义“启动外部程序”时也不行(实际上,这仍然是必要的):

  • Start IE external

    这样做将启动 IE,您的 BHO 也应该运行,但不会命中断点。

    为了解决这个问题,我们将使用:
    public virtual void SetSite(Object pUnkSite)
        {
    
    #if DEBUG
            Debugger.Launch();
    #endif
    
            ... Other code ...
        }
    

    这可确保调试器在 BHO 生命周期的早期连接。阅读详细信息 here .

    F5现在会出现几个对话框,询问您要附加哪个调试器:

    Debug dialog I

    Debug dialog II

    Debug Dialog III

    从此调试愉快:

    Breakpoints can be hit!

    我希望这有帮助!

    编辑

    我最近被要求为我写的一个相当古老的 BHO 带来一些更新。重温我自己的教程,我注意到在遵循它时可能会出现一些问题:

    1) 在使用 VS2010(如已发布)快速部署 W7 机器后,我在尝试连接调试器时遇到了一个奇怪的错误:

    Framweork version errors!

    我也可以通过安装 VS2010 SP1(因为我最初使用它)来解决这个问题,尽管我不知道为什么会发生这种情况。

    2) 现在,当尝试附加调试器时,我的项目所在的 VS2010 实例不在可用调试器列表中。

    Debugger not there!

    然而,当我取消所有对话框并重新启动 IE 时,正在运行的实例神奇地在那里,我可以再次点击我的断点。该问题似乎与 questions by others 有关.

    编辑 2

    第二个问题在完全重启后解决,就像在 linked question 中一样.

    关于visual-studio - 如何在 Visual Studio/Internet Explorer 中调试 C# BHO 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086891/

    相关文章:

    node.js - Visual Studio Team Services Azure 部署(无法对指定目录执行操作 ("Delete File")

    c++ - Visual Studio快速替换宏及其定义

    sql - sp_executesql 参数中的 T-SQL 对象引用

    html - 下拉菜单中的链接在 IE 中不起作用

    c++ - VS 2012 中有什么可以改变来破坏我的 C++ 应用程序?

    c# - Control.OnPaint() 在自定义控件中被调用两次

    html - 高度 :100% not working in Internet Explorer

    html - IE 无法正确呈现 <A> 标签

    c++ - 您是否推荐在构建时为 C/C++ 启用代码分析?

    visual-studio-2010 - 如何在 Visual Studio 调试器命令行参数中包含百分比字符?