2010-06-17 5 views
0

Я добавил типы к моим классам .NET, которые я использую для взаимодействия COM. Чтобы заставить его работать с моим приложением VB6, я незарегистрировал DLL и перерегистрировал его (используя regasm). Затем я удалил и переустановил его на GAC (используя gacutil).Нужно ли мне заставить GAC перезагрузить сборку? Это возможно?

Типы отображаются в проводнике объектов VB6, но когда я запускаю приложение в VB6 IDE, он разбивается на строку, которая создает новые типы с ошибкой: Automation Errror - The System cannot find the file specified.

Я думал, что это странно, так как я уже обновил GAC, так что я удалил в DLL из GAC и получил ту же самую ошибку, которая, кажется, показывают, что более старая версия DLL уже в памяти и потребностей для «перезагрузки», чтобы новая DLL находилась в памяти. Возможно ли это, и если да, что мне нужно делать?

ответ

0

Попробуйте сохранить проект VB6, закрыв IDE и повторно открыв проект. Это сработало для меня в этой ситуации.

1

Я подозреваю, что regasm.exe добавляет записи COM для ваших объектов и указывает их на расположение сборки до того, как он был GAC'd. Обычно это не должно иметь значения, поскольку GAC победит во всех случаях. Но там может быть разницей для COM-взаимодействия.

Попробуйте выполнить поиск в реестре и посмотреть, где находятся COM-объекты для ваших COM-интерфейсов, и убедитесь, что ваша сборка существует в этом месте.

+0

Я не уверен, что я смотрю в нужном месте в реестре, но когда я смотрю в соответствующем ключе в 'CLSID', в списке нет определенной DLL, а есть ключ, называемый' InprocServer32', значения для '(по умолчанию)', 'Assembly',' Class', 'RuntimeVersion' (это v4.0.30319) и' ThreadingModel'. Поскольку DLL не указана (как было бы, если бы я использовал параметр '/ codebase' с' regasm'), я предполагаю, что он пытается использовать файл из GAC, но для него не похоже, что файл из GAC всегда загружается в память, когда он изменяется, но я не уверен. –

Смежные вопросы