COM-сервер должен быть зарегистрирован, чтобы COM мог найти DLL, когда клиентская программа запрашивает ее. Технически этого можно избежать, предоставив клиентской программе манифест со свободными от регистра записями COM, <clrClass>
требуется для серверов COM, которые написаны с использованием управляемого кода. Ключевым моментом является то, что этот манифест должен быть встроен в клиент , а не в сервер. Пока не заходите туда, пока ваш COM-сервер не работает должным образом.
Одна стандартная ошибка - забыть использовать параметр / codebase с Regasm.exe. Без этого сборка должна быть строго названа и помещена в GAC. Это не то, что вы хотите сделать на своем компьютере разработчика. Другая распространенная ошибка - использование неправильной версии Regasm.exe. Вам нужно обратить внимание на разрядность на 64-битной машине. И выберите правильный, если вы используете VS2010 и GAC, .NET 4 имеет другое местоположение для GAC.
Вы должны улучшить атрибуты, которые вы используете. Правильный COM-сервер только предоставляет интерфейсы и скрывает реализацию. Используйте [InterfaceType (ComInterfaceType :: InterfaceIsDual)] в объявлении интерфейса и [ClassInterface (ClassInterfaceType :: None)] в классе. Теперь вам больше не нужен [ComDefaultInterface], и зависимость библиотеки типов от mscorlib.tlb исчезнет.
Если у вас все еще есть проблемы, то утилита SysInternals ProcMon может точно показать вам, где в реестре клиент искал ваш сервер, и сравнить его с фактическими местоположениями реестра, которые использует ваш сервер.