Подтвердить что ты не робот

Excel.NET COM - ошибка автоматизации. Система не может найти указанный файл

У меня есть COM-объект .NET 2.0, который используется VBA в Excel. Он отлично работает на моей машине dev, но при попытке использовать его на чистой рабочей станции VM я получаю эту ошибку:

Ошибка автоматизации. Система не может найти указанный файл.

DLL регистрируется с помощью "regasm/tlb/codebase mycom.dll" и не помещается в GAC. У меня нет прав администратора на поле VM

Любые идеи?

4b9b3361

Ответ 1

Вам нужно либо вызвать regasm с полным путем к сборке в качестве значения параметра codebase, либо поместить сборку в какое-то место, которое всегда находится на пути поиска библиотек. В противном случае он не будет обнаружен, когда клиент попытается создать экземпляр COM-объекта.

Ответ 2

В Windows 7, 64 бит и dll.NET 4.0 framework (32 бит), которые я хочу использовать в качестве COM-объекта для приложения Microsoft Excel 2010 VBA, вот что сработало для меня.

  • Скопировать dll в c:\windows\syswow64
  • В командной строке cmd запустите

    C:\Windows\Microsoft.NET\Framework\v4.0.<whatever you have>\regasm.exe c:\windows\syswow64\<name of dll> /codebase /tlb:c:\windows\syswow64\<name of dll minus '.dll'>.tlb
    

Вы можете пропустить последнюю часть (/tlb:..), если вы не хотите или не нуждаетесь в intellisense на машине, на которой вы регистрируете сборку.

Ключевое зависание, которое у меня было, это то, что на XP мне никогда не приходилось использовать параметр /codebase раньше, но это была ключевая вещь, необходимая до того, как это сработало.

Ответ 3

Я получил эту ошибку "Ошибка автоматизации", после которой я установил .NET.dll(v4.0) с намерением использовать ее в приложении VB6 (украсил мой класс "ClassInterface" "и" ComVisible ", методы с" ComVisible ").

Я запустил "regasm.exe -tlb C:\PathTo\MyDll.dll", но получил вышеуказанную ошибку после добавления файла .tlb в качестве ссылки в моем приложении VB6 и запуска/отладки. Только после добавления параметра "-codebase" в вызов regasm.exe и повторного добавления ссылки .tlb ошибка была решена.

Просто подумал, что я поделюсь своим опытом.

Ответ 4

Я также получаю ошибку автоматизации. Моя ссылка (в MS Access) была связана с файлом TLB. Соответствующий DLL файл отсутствовал в папке, в которой хранился файл TLB, и это вызвало появление сообщения об ошибке автоматизации. Добавление DLL обратно в фиксированное.

Ответ 5

Я получал ту же ошибку (не мог использовать объект .NET из старой трещины VB6 на второй машине для разработчиков, после того, как он работал на первой машине, на которой я ее написал)..NET DLL скомпилирован и зарегистрирован просто отлично - я пробовал всевозможные комбинации - с использованием и без использования настройки сборки "Register for COM Interop" в VS; регистрируя вручную через regasm.exe и пробуя это как с параметром /codebase, так и без него; попробовал как включение, так и подавление атрибута уровня сборки COM Visible (при подавлении я устанавливаю атрибут класса, который должен потреблять из COM). Но ничего не получилось, я продолжал получать ту же ошибку.

Оказывается, я обновил вывод DLL на .NET 4.5 на втором компьютере, тогда как он изначально собирал сборку .NET 2.0. В моем проекте было несколько ссылок, предназначенных для сторонних DLL-библиотек, работающих под управлением .NET 2.0. Когда я либо обновил эти ссылки и перестроил DLL, либо снова установил мой проект на .NET 2.0, моя проблема была решена. При использовании /codebase (который VS делает автоматически), я обнаружил, что мне не нужно помещать свою DLL в каталог приложения или в \syswow64. Кроме того, в документах MSDN указано, что вы должны использовать SN (сильное имя) для своей сборки при использовании /codebase, но я обнаружил, что вам не нужно; вы просто получаете предупреждение от инструмента командной строки regasm.exe.

Точка зрения, с точки зрения COM-взаимодействия, будьте осторожны с версией ваших версий .NET для среды .NET, на которую вы нацеливаетесь.