У меня есть приложение, которое использует некоторые классы из собственной DLL COM в изолированном развертывании.
Упрощенный:
Во время выполнения я загружаю dll с файлом манифеста в определенный каталог, не регистрируя его.
Затем я создаю контекст активации, указывающий на этот каталог, а затем создаю экземпляры классов из dll.
Скажем, создадим класс A и через некоторое время класс B.
В этом потоке все идет хорошо.
Проблема началась, когда я изменил свое приложение на WinForm. Когда нажата «кнопка 1», я создаю контекст активации, как и раньше, а затем создаю экземпляр класса A. Это работает хорошо, и поток возвращается в мою WinForm. Однако, когда нажата «кнопка 2», мне не удается создать класс B. Я получаю исключение, говорящее, что класс не может быть найден!
Так что похоже, что WinForm каким-то образом портит мой контекст активации.
Это почему? Что там происходит?
Есть ли способ обойти это?
Несколько заметок:
Я попытался выполнить создание контекста активации с помощью sxstrace.exe, однако он зарегистрировал только мое создание контекста активации.
Я попытался закомментировать Application.EnableVisualStyles(), но это не помогло.
Если я оборачиваю каждый вызов моей dll созданием и уничтожением контекста активации, он работает, но, естественно, я не хочу туда идти...