Загрузка класса из реестра с помощью COM работает с ToolsVersion=2.0, но не работает с ToolsVersion=4.0

У меня есть проект С#, который использует внутренний проект vb в качестве COM.

Когда я преобразовал проект в VS 2010, следующая строка выдает мне исключение:

Set RTCClient_ = New RTCCORELib.RTCClient

RTCCore.RTCClient является частью модуля Microsoft Merge для RTC (RTC Client API 1.2), который вы можете встроить в свой установочный пакет (в моем случае это EXE-файл).

RTCCore.RTCClient — это класс, который регистрируется в реестре под HKEY_CLASSES_ROOT\RTCCore.RTCClient

Ошибка, которую я получаю:

ОШИБКА: ошибка автоматизации
Не удалось найти указанный модуль. (-2147024770)

Но если я меняю свой csproj и использую ToolsVersion="2.0", приведенная выше строка работает, и я могу получить объект RTCClient.

В чем проблема?


person Dor Cohen    schedule 20.09.2012    source источник
comment
можете ли вы показать, как вы вызываете свой COM-объект из С#   -  person cnd    schedule 20.09.2012
comment
Я думаю, что в вашем вопросе отсутствует некоторая информация. Уточните, пожалуйста, что такое RTCCORElib.RTCClient; подтвердите, реализует ли сам проект VB COM-сервер; и объясните роль проекта C# и его конкретное отношение к этому коду VB.   -  person Chris Dickson    schedule 20.09.2012
comment
подтвердите, реализует ли сам проект VB COM-сервер; и объясните роль проекта С# и то, как он конкретно относится к этому коду VB - я до сих пор не вижу этого в вашем отредактированном вопросе.   -  person Chris Dickson    schedule 20.09.2012
comment
Мой хрустальный шар говорит: удалите On Error Resume Next из этого кода, чтобы получить правильную диагностику.   -  person Hans Passant    schedule 20.09.2012
comment
Мяч все еще говорит: это код ошибки 0x8007007E, код ошибки Windows. Это означает, что «файл не найден» при попытке загрузить DLL. Существует множество причин, по которым DLL не может быть найдена, типичная причина — забыть использовать параметр /codebase при запуске Regasm.exe для регистрации сборки C#. Вы можете использовать утилиту SysInternals ProcMon, чтобы увидеть, где она ищет DLL.   -  person Hans Passant    schedule 20.09.2012
comment
@HansPassant Моя восьмерка говорит мне, что мой вопрос заключается в том, почему в ToolsVersion=2.0 моему коду удалось создать объект, а в ToolsVersion=4.0 не удалось, в чем разница   -  person Dor Cohen    schedule 20.09.2012
comment
@DorCohen Если вы подозреваете, что в процессе сборки между версиями 2.0 и 4.0 есть какая-то разница, вы можете изменить в Visual Studio 2010 уровень детализации вывода (например, для диагностики) через Инструменты -> Параметры -> Проект и решения -> Сборка и запуск. -› Детализация вывода сборки проекта MSBuild.   -  person Alessandro Jacopson    schedule 21.09.2012
comment
Как связан ваш внутренний проект VB, если библиотека RTCCore предоставляется Microsoft?   -  person Holistic Developer    schedule 01.10.2012
comment
@DorCohen Можете ли вы попробовать установить useLegacyV2RuntimeActivationPolicy в app.config приложения и посмотреть, поможет ли это? : msdn.microsoft.com/en-us /библиотека/bbx34a2h%28v=vs.100%29.aspx   -  person Ganesh R.    schedule 20.01.2013


Ответы (1)


Попробуйте установить Embed Interop Types на false в свойствах ссылки на вашу COM-библиотеку в проекте. У меня C#, но он может быть и у вашего VB.Net.

Окно свойств

person user195275    schedule 04.10.2012