Excel .NET COM - Ошибка автоматизации. Система не может найти указанный файл - PullRequest
18 голосов
/ 19 мая 2009

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

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

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

Есть идеи?

Ответы [ 5 ]

16 голосов
/ 19 мая 2009

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

8 голосов
/ 16 сентября 2014

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

  1. Скопируйте dll в c: \ windows \ syswow64
  2. В оболочке 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 прежде, но это было ключевым моментом, необходимым до того, как это сработало.

4 голосов
/ 18 августа 2015

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

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

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

0 голосов
/ 14 августа 2017

Я получаю ту же ошибку (не могу использовать объект .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, на которую вы нацелены.

0 голосов
/ 16 июня 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...