如何在visual studio/internet explorer中调试C#BHO项目

ops*_*psb 5 internet-explorer bho visual-studio-2010 visual-studio

我正在使用visual studio 2010在C#中创建一个IE扩展.如何在Internet Explorer中运行它时调试扩展?

Kri*_*ris 20

一些事情非常引人注目:

  1. 这个问题被问了很多
  2. 大多数答案,如果不是全部,都是不完整或不正确的

所以这就是:VS2010.执行以下操作:

  1. 创建你的BHO项目,一个很好的起点是:演示IE工具栏/ BHO
  2. 创建一个类似的解决方案/项目,转到"解决方案资源管理器",右键单击您的项目或使用Alt + Enter并转到"属性":

项目属性

  1. 确保选择了调试配置文件:

调试配置文件

  1. 我们需要一些post构建事件来注册我们的程序集:

定义后期构建事件

这些是不同的命令:

"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)"
Run Code Online (Sandbox Code Playgroud)

订单很重要.首先,程序集取消注册,然后注册.第一次运行它时,构建将失败,因为这些构建后的事件将失败.这是正常的,第一次构建时,没有注册任何程序集,因此没有任何内容可以取消注册.你第二次建造,一切都会好起来的.在此阶段,在成功,无错误构建之后,手动启动IE应该会导致您的BHO可见:

检查BHO注册

检查BHO注册II

  1. 现在我们也希望能够按下F5,完成整个构建,打开IE并附加调试器.然而,与流行的看法相反,VS 2010调试器不会自行附加,即使在"调试"中定义"启动外部程序"时也是如此(事实上,这仍然是必要的):

启动IE外部

这样做会启动IE,你的BHO也应该运行,但断点不会被击中.

要解决这个问题,我们将使用:

public virtual void SetSite(Object pUnkSite)
    {

#if DEBUG
        Debugger.Launch();
#endif

        ... Other code ...
    }
Run Code Online (Sandbox Code Playgroud)

这可确保调试器在BHO生命周期的早期得到附加.在这里阅读有关细节的详细信息.

F5现在按将导致一些对话框询问您要附加哪个调试器:

调试对话框I.

调试对话框II

调试对话框III

从那以后,很高兴调试:

断点可以被击中!

我希望这有帮助!

编辑

我最近被要求给我写的一个相当古老的BHO带来一些更新.重新访问我自己的教程,我发现在遵循它时可能会出现一些问题:

1)在使用VS2010(已发布)快速部署W7机器后,尝试连接调试器时出现了一个时髦的错误:

Framweork版本错误!

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

2)现在,当尝试连接调试器时,持有我的项目的VS2010实例不在可用调试器列表中.

调试器不存在!

但是,当我只是取消所有对话框并重新启动IE时,正在运行的实例神奇地存在,我可以再次点击我的断点.这个问题似乎与其他人的问题有关.

编辑2

第二个问题在完全重启后解决,就像链接问题一样.

  • 完美答案! (2认同)
  • 你很酷!这应该是公认的答案 (2认同)

Han*_*ant 3

项目+属性,调试选项卡。选择“启动外部程序”,将其设置为c:\program files\internet explorer\iexplore.exe。您可能希望将“命令行参数”设置为执行 BHO 的 HTML 文件的路径。

在要调试的代码上设置断点。当您按 F5 时,Internet Explorer 将开始运行。您将看到断点变成空心,表明该断点未布防。一旦 IE 加载您的 DLL(在“输出”窗口中可见),它就会变成纯红色。当 IE 调用您的代码时,调试器会自动中断。

有一个注册步骤。请始终避免使用 gacutil.exe,它只会污染计算机上的 GAC。始终支持 IDE 中的“注册 COM 互操作”选项,相当于使用 /codebase 选项运行 Regasm.exe。这样就不需要 GAC 了。无论哪种方式,VS 都必须以提升的方式运行才能进行这些计算机配置更改,通过右键单击快捷方式并选择“以管理员身份运行”来启动它。