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

时间:2010-11-03 12:10:48

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

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

2 个答案:

答案 0 :(得分:20)

有些事情非常引人注目:

  1. 这个问题被问了很多
  2. 大多数答案(如果不是全部)都不完整或不正确
  3. 所以这就是:在VS2010中。执行以下操作:

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

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

        1. 我们需要一些帖子构建事件来注册我们的程序集:
        2. 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

          1. 现在我们也希望能够按下F5,整个构建,打开IE并附加调试器。然而,与流行的看法相反,VS 2010调试器不会自行附加,即使在定义"启动外部程序" in" Debug" (事实上​​,这仍然是必要的):
          2. 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中一样。

答案 1 :(得分:3)

Project + Properties,Debug选项卡。选择“启动外部程序”,将其设置为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必须升级才能进行这些机器配置更改,通过右键单击快捷方式并选择“以管理员身份运行”来启动它。