我正在使用 Visual Studio 2010 在 C# 中创建 IE 扩展。如何在 Internet Explorer 中运行扩展时调试它?
最佳答案
有几件事非常引人注目:
所以这里是:在VS2010中。执行以下操作:
这些是不同的命令:
"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 可见:
F5
, 完成整个构建,打开 IE 并附加调试器。然而,与流行的看法相反,VS 2010 调试器不会自己附加,即使在“调试”中定义“启动外部程序”时也不行(实际上,这仍然是必要的):这样做将启动 IE,您的 BHO 也应该运行,但不会命中断点。
为了解决这个问题,我们将使用:
public virtual void SetSite(Object pUnkSite)
{
#if DEBUG
Debugger.Launch();
#endif
... Other code ...
}
这可确保调试器在 BHO 生命周期的早期连接。阅读详细信息 here .
按
F5
现在会出现几个对话框,询问您要附加哪个调试器:从此调试愉快:
我希望这有帮助!
编辑
我最近被要求为我写的一个相当古老的 BHO 带来一些更新。重温我自己的教程,我注意到在遵循它时可能会出现一些问题:
1) 在使用 VS2010(如已发布)快速部署 W7 机器后,我在尝试连接调试器时遇到了一个奇怪的错误:
我也可以通过安装 VS2010 SP1(因为我最初使用它)来解决这个问题,尽管我不知道为什么会发生这种情况。
2) 现在,当尝试附加调试器时,我的项目所在的 VS2010 实例不在可用调试器列表中。
然而,当我取消所有对话框并重新启动 IE 时,正在运行的实例神奇地在那里,我可以再次点击我的断点。该问题似乎与 questions by others 有关.
编辑 2
第二个问题在完全重启后解决,就像在 linked question 中一样.
关于visual-studio - 如何在 Visual Studio/Internet Explorer 中调试 C# BHO 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086891/