Я получаю ту же ошибку (не могу использовать объект .NET из устаревшей трески VB6 на втором компьютере разработчика, после того, как он работал на первом компьютере, на котором я изначально писал). .NET DLL скомпилирована и зарегистрирована просто отлично - я перепробовал все виды комбинаций - с использованием и без использования настройки сборки «Register for COM Interop» в VS; регистрация вручную с помощью regasm.exe и попытка сделать это как с параметром / codebase, так и без него; попытался включить и подавить атрибут уровня сборки COM Visible (при подавлении я устанавливал атрибут для класса, который мне нужно использовать из COM). Но ничего не получалось, я продолжал получать ту же ошибку.
Оказывается, я обновил вывод DLL до .NET 4.5 на втором компьютере, тогда как изначально он собирал сборку .NET 2.0. В моем проекте было несколько ссылок на сторонние DLL-библиотеки Interop, работающие на .NET 2.0. Когда я обновил эти ссылки и перестроил библиотеку DLL или вернул мой проект для работы в .NET 2.0 - моя проблема была решена. При использовании / codebase (что VS делает автоматически) я обнаружил, что мне не нужно помещать мою DLL в каталог приложения или в \ syswow64. Также в документации MSDN указано, что вы должны использовать SN (строгое имя) для вашей сборки при использовании / codebase, но я обнаружил, что вам не нужно; вы просто получаете предупреждение от инструмента командной строки regasm.exe.
Дело в том, что с точки зрения COM Interop, будьте осторожны с версией .NET ваших зависимостей во время выполнения .NET Framework, на которую вы нацелены.