Не удается добавить ссылку на dll убедитесь что файл доступен

Как решить «пожалуйста, убедитесь, что файл доступен и что это допустимая сборка или COM-компонент»?

ссылка » cvextern.dll » не может быть добавлен, убедитесь, что файл доступен и что это допустимая сборка или COM-компонент.

Я устал от поиска, я провел последние 2 дня в поисках решения этой проблемы

6 ответов

убедитесь, что необходимые библиотеки DLL экспортируются (или копируются вручную) в папку bin при создании приложения.

У меня была такая же программа, надеюсь, это может помочь.

посмотреть здесь в ответ TheMattster. Я реализовал его, и это сработало как заклинание. В двух словах, его решение предлагает добавить com dll в качестве ресурса в проект (так что теперь он компилируется в dll проекта), и при первом запуске напишите его в файл (т. е. dll-файл, который я хотел там в первую очередь).

следующее взято из его ответа.

Шаг 1) добавьте DLL в качестве ресурса (ниже как «Ресурсы.DLL-файл»). Для этого откройте свойства проекта, перейдите на вкладку «ресурсы» выберите «Добавить существующий файл» и добавить DLL в качестве ресурса.

Шаг 2) Добавьте имя DLL в качестве строкового ресурса (ниже как » ресурсы.параметр dllname.)»

Шаг 3) Добавьте этот код в основную форму-load:

моя проблема заключалась в том, что мне не только пришлось использовать com dll в моем проекте, мне также пришлось развернуть его с помощью моего приложения с помощью ClickOnce и без возможности добавить ссылку для этого в моем проекте вышеприведенное решение практически единственное, которое сработало.

‘ It ‘ требует dll-файл с именем cvextern.файл DLL. «Это» может быть либо ваш собственный cs-файл, либо какая-либо другая сторонняя dll, которую вы используете в своем проекте.

чтобы вызвать собственные библиотеки DLL в свой собственный cs-файл, скопируйте dll в корневой каталог\lib вашего проекта и добавьте его в качестве существующего элемента. (Добавить-существующий элемент) и использовать Dllimport с правильным расположением.

для третьей стороны скопируйте родную библиотеку в папку, где находится сторонняя библиотека, и добавьте ее как существующий элемент.

после построения убедитесь, что необходимые библиотеки DLL отображаются в папке сборки. В некоторых случаях он может не отображаться или заменяться в папке сборки. Удалите папку Build вручную и создайте снова.

Источник

Не удалось добавить ссылку на dll

ссылка «. dll » не удалось добавить.Пожалуйста, убедитесь, что файл доступен и является допустимой сборкой или COM деталь.

ILDissassembler говорит, что нет допустимого заголовка CLR, поэтому я пытаюсь зарегистрировать его с помощью regsvr32, и это дает мне еще одну ошибку:

модуль «» был загружен, но вызов DLLRegisterServer не удалось код ошибки 0x80004005 при’

Я использую версию VS2010 ultimate на 64-битной машине Windows 7. В чем может быть проблема?

Спасибо за любые советы/ответы

15 ответов

для меня сработало следующее:

короткий ответ:

выполните следующие действия через командную строку (cmd):

и для вас будет создана допустимая dll.

более длинный ответ

Найти TlbImp.исполняемый. Вероятно, находится в C:\Program файлы (x86)\Microsoft SDKs\Windows\v7.0A\Bin. Если вы не можете найти его, перейдите в корневую папку (C:\ или D:) и беги:

запустить программу tlbimp.exe и поместите свою dll за него. Пример: если ваша dll является cvextern.файл DLL. Вы можете запустить:

regsvr32 также делает определенные предположения о структуре и экспортируемой функции в DLL. Прошло некоторое время с тех пор, как я использовал его, но это связано с регистрацией COM-серверов, поэтому определенные точки входа должны быть доступны. Если regsvr32 терпит неудачу, DLL не предоставляет эти точки входа, а DLL не содержит com-компонент.

вы только шанс использования DLL-импортировать его, как и любой другой non-.NET двоичный, например, при использовании определенных Win32 API. Существует старая статья журнала MSDN, которая может быть полезна. См. следующее обновление для получения информации о том, где получить статью.

Обновление 12 Марта 2018: ссылка на журнал MSDN не работает, как это было в августе 2010 года. Статья Джейсона Кларка называется «.NET Column: вызов Win32 DLL в C# с P/Invoke». Он был опубликован в июльском номере 2010 года журнал MSDN Magazine. В «Wayback Machine» есть статья здесь на данный момент (форматирование ограничено). Весь выпуск журнала MSDN июль 2010 доступен здесь (только формат HCM, инструкции по использованию файлов HCM здесь).

Я использовал dependency walker для проверки внутренних ссылок, которые имела dll. Оказывается, он нуждался в среде выполнения VB msvbvm60.dll и так как мой dev box не установлен, я не смог зарегистрировать его с помощью regsvr32

Это, кажется, ответ на мой первоначальный вопрос сейчас.

убедитесь, что ваш компилятор установлен в x86, если вы пытаетесь ссылаться на x86 dll.

У меня были похожие проблемы. как упоминалось выше, попытка использовать OLEDB для доступа к файлу Excel из моего кода C# в Visual Studio 2012.

Я продолжал получать ошибки о том, что библиотека Access недоступна, но я знал, что загрузил ее.

во время отладки меня осенило, что я компилирую для 64 бит, но загрузил Office x86. Хотя я загрузил Доступ к библиотеке для 32 бит, он никогда не использовался приложением. и поэтому был недоступен.

вот что я использовал в C#:

«Поставщик=Microsoft.ТУЗ.Oledb для.12.0; источник данных= » + strFilePath +»; расширенные свойства=’Excel 12.0 Xml; HDR=Yes'»;

. Я получал сообщение об ошибке

Как только я переключил компилятор для x86 он работал

Я просто столкнулся с этой проблемой, и после всех объяснений о ее исправлении с помощью командной строки я обнаружил, что если вы добавите ее непосредственно в проект, вы можете просто включить библиотеку на каждой странице, что это необходимо

У меня такая же проблема с импортом WinSCard.dll в моем проекте. Я имею дело с этим импортом непосредственно из dll, как это:

вы можете добавить это в отдельный проект, а затем добавить ссылку из своего основного проекта.

вы не можете добавить ссылку на уроженца DLL. Однако вы можете включить их в решение (щелкните правой кнопкой мыши решение, выберите «Добавить существующий файл»), но они не будут ссылаться, если вы не объявите что-то вроде

может быть, есть какой-то фантик DLL, на которую вы фактически ссылаетесь и которая содержит импорт DLL.

иногда вы можете ссылаться на DLL-оболочку, но все равно не можете запустить свою программу, где подсказка об ошибке предлагает вам убедиться, что файл существует и все зависимости доступны.

эта проблема заключается в том, что сборка, которую вы пытаетесь добавить, является целевой и компилируется только для x86 или х64 архитектура процессора.

для тех, кто ищет помощь по этому вопросу, или испытывает FileNotFoundException или FirstChanceException, проверьте мой ответ здесь:

У меня была эта проблема после того, как мой компьютер был перезагружен во время построения решения. Мои две ссылки исчезли, поэтому мне пришлось перестроить два моих проекта вручную, а затем я мог добавить ссылки без ошибок.

У меня была эта ошибка при записи службы Windows. Я запускал Visual Studio как администратор, чтобы мои команды сборки post автоматически устанавливали мою службу. Я заметил, что когда я закрыл все и запустил VS нормально (не как администратор), это позволило мне добавить ссылки просто отлично без ошибок.

надеюсь, что это решение работает для вас.

для примера я предлагаю создать новое решение в качестве проекта C++ CLR и изучить XML там, возможно, даже дифференцировать его, чтобы убедиться, что нет ничего очень важного, что выходит за рамки обычного.

мой ответ немного запоздал, но в качестве быстрого теста убедитесь, что вы используете последнюю версию библиотек.

в моем случае после обновления библиотеки nuget, которая ссылалась на другую библиотеку, вызывающую проблему, проблема исчезла.

у меня была та же проблема, когда я пытался добавить dll, которую я только что закодировал. Оказалось, мне нужно было установить свойства проекта, из которого моя dll:

потому что проект, в котором я хотел использовать эту dll, также был установлен так (имел те же свойства, что и /clr ).

Источник

Ссылку на dll добавить не удалось

Не удалось добавить ссылку на «. dll». Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM.

ILDissassembler говорит, что нет допустимого заголовка CLR, поэтому я пытаюсь зарегистрировать его с помощью regsvr32, и это дает мне еще одну ошибку:

Модуль «» был загружен, но вызов DLLRegisterServer завершился неудачно с кодом ошибки ‘0x80004005’

Я использую окончательную версию VS2010 на 64-битной машине с Windows 7. В чем может быть проблема?

Спасибо за любые подсказки / ответы

17 ответов

Я использовал dependency walker, чтобы проверить внутренние ссылки DLL. Оказывается, ему нужна была среда выполнения VB msvbvm60.dll, и поскольку в моем блоке разработчика этого не было, я не смог зарегистрировать его с помощью regsvr32

Кажется, это пока ответ на мой первоначальный вопрос.

Для меня сработало следующее:

Краткий ответ

Выполните следующее через командную строку (cmd):

И для вас будет создана действующая dll.

Более длинный ответ

Найдите TlbImp.exe. Вероятно, находится в C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin. Если вы не можете его найти, перейдите в корневую папку (C: \ или D 🙂 и запустите:

Regsvr32 также делает определенные предположения о структуре и экспортируемой функции в DLL. Прошло некоторое время с тех пор, как я его использовал, но это связано с регистрацией COM-серверов, поэтому должны быть доступны определенные точки входа. Если regsvr32 не работает, DLL не предоставляет эти точки входа, а DLL не содержит компонент COM.

Я продолжал получать ошибки о том, что библиотека Access недоступна, но я знал, что загрузил ее.

Вот что я использовал в C #:

«Provider = Microsoft.ACE.OLEDB.12.0; Data Source =» + strFilePath + «; Extended Properties = ‘Excel 12.0 Xml; HDR = Yes'»;

. Я получал сообщение об ошибке

Как только я переключил компилятор на x86, он заработал

Я только что столкнулся с этой проблемой, и после всех объяснений по ее исправлению с помощью командной строки я обнаружил, что если вы добавите ее непосредственно в проект, вы можете просто включить библиотеку на каждой странице, которая ей нужна.

У меня такая же проблема с импортом WinSCard.dll в мой проект. Я занимаюсь этим импортом напрямую из dll вот так:

Вы можете добавить это в отдельный проект, а затем добавить ссылку из вашего основного проекта.

У меня возникла эта проблема после того, как мой компьютер был перезагружен во время сборки решения. Две мои ссылки исчезли, поэтому мне пришлось перестроить два моих проекта вручную, а затем я мог добавлять ссылки без ошибок.

Вы не можете добавить ссылку на родную DLL. Однако вы можете включить их в решение (щелкните правой кнопкой мыши решение, выберите «Добавить существующий файл»), но на них не будут ссылаться, если вы не объявите что-то вроде

Возможно, существует какая-то оболочка DLL, на которую вы на самом деле ссылаетесь и которая содержит импортируемые библиотеки DLL.

Иногда вы можете ссылаться на DLL-оболочку, но по-прежнему не можете запустить свою программу, где сообщение об ошибке предлагает вам убедиться, что файл существует и все зависимости доступны.

У меня была такая же проблема, когда я попытался добавить DLL, которую я только что закодировал на C ++, в свой новый проект C #. Оказалось, что мне нужно было установить свойства проекта C ++, откуда моя dll:

Потому что проект C #, в котором я хотел использовать эту dll, также был настроен таким образом (имел те же свойства, установленные на /clr ).

У меня была эта ошибка при написании службы Windows. Я запускал Visual Studio от имени администратора, чтобы мои команды пост-сборки автоматически устанавливали мою службу. Я заметил, что когда я закрыл все и запустил VS в обычном режиме (не как администратор), он позволил мне добавить ссылки без ошибок.

Надеюсь, это решение сработает для вас.

В качестве примера я предлагаю создать новое решение в виде проекта C ++ CLR и изучить XML в нем, возможно, даже изменить его, чтобы убедиться, что нет ничего необычного в очень важном.

Мой ответ немного запоздал, но в качестве быстрой проверки убедитесь, что вы используете последнюю версию библиотек.

В моем случае после обновления библиотеки nuget, которая ссылалась на другую библиотеку, вызывающую проблему, проблема исчезла.

(Получение ошибки: не удалось добавить ссылку на «. dll». Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM),

Затем СКОПИРУЙТЕ этот файл dll и ВСТАВЬТЕ в ПРОЕКТ УСТАНОВЩИКА (в папку приложения).

Для всех, кто ищет помощь по этому вопросу или сталкивается с FileNotFoundException или FirstChanceException, ознакомьтесь с моим ответом здесь:

Источник

Описание, данное в комментариях, говорит следующее:

Этот класс ThinkGear для C # представляет собой просто тонкий интерфейсный слой, который использует InteropServices для предоставления доступа к функциям API в библиотеке TGCD, позволяя программам на C # использовать TGCD для связи с модулями ThinkGear.

Не удалось добавить ссылку на «C: \ thinkgear.dll». Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM.

4 ответа

.NET Framework может выполнять вызовы неуправляемых библиотек с помощью Platform Invocation Services, более известной под сокращенным названием P / Invoke. DllImportAttribute в коде оболочки является частью служб вызова платформы.

Взгляните на опубликованный вами вызов функции:

Компилятору не нужна ссылка для разрешения этого метода, потому что вы приложили к нему примечание, в котором говорится: «Не беспокойтесь о том, откуда это на самом деле; я говорю вы, что это такое, поэтому просто используйте его так, как я его объявил, и предполагайте, что он будет доступен во время выполнения «.

У меня была такая же проблема с одной из моих DLL, хотя это была библиотека Borland C ++, и у меня не было исходного кода. Мне удалось импортировать его в VS и использовать, выполнив следующие действия:

Если вы используете неуправляемую DLL, я бы рекомендовал создать вокруг нее управляемый класс-оболочку, чтобы вам не приходилось загрязнять всю базу кода небезопасными вызовами.

Источник

Как решить проблему «Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM»?

невозможно добавить ссылку cvextern.dll. Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM.

Устал искать, последние 2 дня я провел в поисках решения этой проблемы

7 ответов

В моем случае у меня также есть неуправляемые библиотеки DLL (C ++) в рабочей области, и если вы укажете:

Nuget попытается загрузить каждую dll как сборку, даже библиотеки C ++! Чтобы избежать этого поведение явно определяет ваши сборки C # с помощью тега references :

Следующее взято из его ответа.

Шаг 1) Добавьте DLL в качестве ресурса (ниже как «Resources.DllFile»). Для этого откройте свойства проекта, выберите вкладку ресурсов, выберите «добавить существующий файл» и добавьте DLL в качестве ресурса.

Шаг 2) Добавьте имя библиотеки DLL в виде строкового ресурса (ниже как «Resources.DllName»).

Шаг 3) Добавьте этот код в основную загрузку формы:

Моя проблема заключалась в том, что мне пришлось не только использовать COM-библиотеку в моем проекте, мне также пришлось развернуть ее с моим приложением с помощью ClickOnce, и, не имея возможности добавить ссылку на нее в моем проекте, вышеуказанное решение практически единственное, что работал.

«Это» требует наличия DLL-файла cvextern.dll. «Это» может быть либо ваш собственный файл cs, либо другая сторонняя dll, которую вы используете в своем проекте.

Для сторонних разработчиков: скопируйте собственную библиотеку в папку, в которой находится сторонняя библиотека, и добавьте ее как существующий элемент.

После сборки убедитесь, что необходимые dll появляются в папке Build. В некоторых случаях он может не отображаться или заменяться в папке сборки. Удалите папку сборки вручную и выполните сборку заново.

У меня была такая же программа, надеюсь, это поможет.

Убедитесь, что необходимые библиотеки DLL экспортированы (или скопированы вручную) в папку bin при создании приложения.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *