5

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

4

2 回答 2

20

有几件事非常引人注目:

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

所以这里是:在VS2010中。执行以下操作:

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

项目属性

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

调试配置文件

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

定义构建后事件

这些是不同的命令:

"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 可见:

检查 BHO 已注册

检查 BHO 注册 II

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

启动IE外部

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

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

public virtual void SetSite(Object pUnkSite)
    {

#if DEBUG
        Debugger.Launch();
#endif

        ... Other code ...
    }

这可确保调试器在 BHO 生命周期的早期附加。在此处阅读详细信息。

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

调试对话框 I

调试对话框 II

调试对话框 III

从那时起,调试很愉快:

可以打断点!

我希望这有帮助!

编辑

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

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

Framweork 版本错误!

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

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

调试器不存在!

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

编辑 2

第二个问题在完全重启后得到解决,就像在链接的问题中一样。

于 2014-06-13T13:49:37.013 回答
3

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

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

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

于 2010-11-03T12:26:39.550 回答