Вот такое сообщение я получил от студии, когда попытался подключиться к IE, чтобы отладить панельку, написанную на C#. Кстати, хорошая и почти единственная статья о том, как сделать свой тулбар для эксплорера, написана вот здесь: Extending Explorer with Band Objects using .NET and Windows Forms. А теперь - детально. Панель для эксплорера представляет собой так называемый COM Callable Wrapper (CCW) и была написана на .NET 1.1 в Visual Studio 2003 - аттачился я, соответственно, в ней же. Как вы уже поняли, такой способ не сработал. Затем я попытался отладить компонент при помощи другого хост-контейнера (ActiveX Control Test Container) – та же ерунда. Думаю, ладно не студия, так WinDbg. Пусть не так удобно, но на безрыбье и рак рыба. Приатачился! Собирался подгрузить SOS.dll и тут обратил внимание, что в процесс IE загрузился не .NET 1.1 a .NET 2.0! Снес с машины второй фреймворк (к счастью, у меня была такая возможность). И опа! - все хоккей, студия замечательно подключилась. По правде говоря, с СОМом из .NET активно не работал и по этому был немало удивлен. Навел справки. Оказывается, при активации CCW по умолчанию запускается старшая по версии CLR из установленных на машине. (см. статью MSDN Configuring a COM Application for Side-By-Side Execution), однако это поведение можно изменить при помощи config-файла для приложения, которое активирует CCW. В статье есть примечание, что такой подход не работает для Internet Explorer и Microsoft Office :). Решил проверить. Поставил обратно NET 2.0 и убедился, что в IE грузится именно он. Затем создал файл IEXPLORE.EXE.config:
<?xml version ="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v1.1.4322" safemode="false"/>
</startup>
</configuration>
К удивлению обнаружил что для IE 6.0 все замечательно работает и подгружается именно версия 1.1.4322. Конечно, для продакшена такой подход не годится, но для отладки при разработке – вполне.