Как отладить C # BHO проект в visual studio / internet explorer - PullRequest
5 голосов
/ 03 ноября 2010

Я создаю расширение IE в C # с помощью Visual Studio 2010. Как мне отладить расширение при его запуске в Internet Explorer?

Ответы [ 2 ]

20 голосов
/ 13 июня 2014

Несколько вещей очень поразительны:

  1. Этот вопрос задают много
  2. Большинство ответов, если не все, являются неполными или неправильными

Так что вот так: В VS2010.выполните следующее:

  1. Создайте свой проект BHO, хорошей отправной точкой будет: Демонстрационная панель инструментов IE / BHO
  2. Создайте аналогичное решение / проект, перейдите к«Solution Explorer», щелкните правой кнопкой мыши свой проект или используйте 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.Читайте о мельчайших подробностях здесь .

Нажатие F5 теперь приведет к появлению нескольких диалоговых окон с вопросом, какой отладчик подключить:

Debug dialog I

Debug dialog II

Debug Dialog III

С этого момента начинается счастливая отладка:

Breakpoints can be hit!

Надеюсь, это поможет!

EDIT

Недавно меня попросили внести некоторые обновления в довольно древнюю BHO, которую я написал.Пересматривая мой собственный учебник, я заметил, что при его следовании могут возникнуть некоторые проблемы:

1) После быстрого развертывания машины W7 с VS2010 (как выпущено) я получил странную ошибку, когда была предпринята попытка присоединить отладчик:

Framweork version errors!

Я мог бы решить эту проблему, также установив VS2010 SP1 (как я использовал его изначально), хотя я понятия не имею, почему это происходит.

2) Сейчас, когда делается попытка присоединить отладчик, экземпляр VS2010, содержащий мой проект, отсутствует в списке доступных отладчиков.

Debugger not there!

Однако, когда я просто отменяю все диалоговые окна и перезапускаю IE, запущенный экземпляр волшебным образом появляется, и я могу снова достичь своих точек останова.Кажется, проблема связана с вопросами других .

РЕДАКТИРОВАТЬ 2

Вторая проблема была решена после полной перезагрузки, как и в связанный вопрос .

3 голосов
/ 03 ноября 2010

Проект + Свойства, вкладка Отладка.Выберите «Запустить внешнюю программу», установите для нее c: \ program files \ internet explorer \ iexplore.exe.Возможно, вы хотите установить в качестве «аргументов командной строки» путь к HTML-файлу, который использует ваш BHO.

Установите точку останова в коде, который вы хотите отлаживать.Internet Explorer начнет работать, когда вы нажмете F5.Вы увидите, что точка останова становится пустой, указывая на то, что точка останова не включена.Как только IE загрузит вашу DLL, видимую в окне вывода, он станет сплошным красным.И отладчик автоматически ломается, когда IE вызывает ваш код.

Есть этап регистрации.Всегда избегайте использования gacutil.exe, он только загрязняет GAC на вашем компьютере.Всегда поддерживайте опцию «Зарегистрироваться для взаимодействия COM» в IDE, что эквивалентно запуску Regasm.exe с опцией / codebase.Нет необходимости в GAC таким образом.В любом случае VS должен работать с повышенными правами, чтобы внести изменения в конфигурацию компьютера, запустите его, щелкнув правой кнопкой мыши ярлык и выбрав «Запуск от имени администратора».

...