Когда я добавляю файл .dll в качестве ссылки в приложение C #, он показывает ошибку:
Не удалось добавить ссылку на «.... dll». Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM.
ILDissassembler говорит, что нет допустимого заголовка CLR, поэтому я пытаюсь зарегистрировать его с помощью regsvr32, и это дает мне еще одну ошибку:
Модуль "" был загружен, но вызов DLLRegisterServer завершился неудачно с кодом ошибки '0x80004005'
Я использую окончательную версию VS2010 на 64-битной машине с Windows 7. В чем может быть проблема?
Спасибо за любые подсказки / ответы
TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.
предложения?Вы можете добавить в проект DLL (или EXE), только если это сборка .NET. В противном случае вы увидите это сообщение об ошибке.
regsvr32 также делает определенные предположения о структуре и экспортируемой функции в DLL. Прошло некоторое время с тех пор, как я его использовал, но это связано с регистрацией COM-серверов, поэтому должны быть доступны определенные точки входа. Если regsvr32 не работает, DLL не предоставляет эти точки входа, а DLL не содержит компонент COM.
Единственный шанс использовать DLL - это импортировать ее, как любой другой двоичный файл, отличный от .NET, например, когда вы используете определенные API Win32. Есть старая статья журнала MSDN, которая может быть полезна. Информацию о том, где взять статью, см. В следующем обновлении.
Обновление от 12 марта 2018 г .: ссылка на журнал MSDN больше не работает, как в августе 2010 г. Статья Джейсона Кларка озаглавлена «Столбец .NET: вызов библиотек DLL Win32 в C # с помощью P / Invoke». Он был опубликован в июльском выпуске журнала MSDN Magazine за 2010 год. «Вайбак машина» имеет статью здесь в данный момент (форматирование ограничено). Полный выпуск журнала MSDN за июль 2010 г. доступен здесь (только формат HCM, инструкции по использованию файлов HCM здесь ).
источник
Я использовал dependency walker, чтобы проверить внутренние ссылки, которые имела dll. Оказывается, ему нужна была среда выполнения VB msvbvm60.dll, и поскольку в моем блоке разработчика этого не было, я не смог зарегистрировать его с помощью regsvr32
Кажется, это пока ответ на мой первоначальный вопрос.
источник
Убедитесь, что ваш компилятор установлен на x86, если вы пытаетесь сослаться на dll x86 ...
У меня были аналогичные проблемы ... как упоминалось выше, я пытался использовать OLEDB для доступа к файлу Excel из моего кода C # в Visual Studio 2012.
Я продолжал получать ошибки о том, что библиотека Access недоступна, но я знал, что загрузил ее.
Во время отладки меня осенило, что я компилирую для 64-разрядной версии, но у меня загружен Office x86. Несмотря на то, что я загрузил библиотеку Access для 32-разрядной версии, она никогда не использовалась приложением ... и поэтому была недоступна.
Вот что я использовал в 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-оболочку, но по-прежнему не можете запустить свою программу, где подсказка об ошибке предлагает вам убедиться, что файл существует и все зависимости доступны.
Эта проблема связана с тем, что сборка, которую вы пытаетесь добавить, предназначена и скомпилирована только для архитектуры процессора x86 или x64 .
Просто попробуйте изменить целевую платформу на x86 или x64 в Build -> Configuration Manager .
источник
Мне нужно архитектуры изменений на x86 от x64 в диспетчере конфигурации и скопировать мой 32 бит DLL (язык C - pcProxAPI.dll) в новую папку это созданный .. Это на вершине шагов , описанных в «Sashus» ниже .
C: \ Projects .. \ bin \ x86 \ Debug
источник
У меня была такая же проблема, когда я попытался добавить DLL, которую я только что закодировал на C ++, в свой новый проект C #. Оказалось, что мне нужно было установить свойства проекта C ++, откуда моя dll:
Configuration Properties\General\Common Language Runtime Support: /clr
Configuration Properties\C/C++\General\Common Language RunTime Support: /clr
Потому что проект C #, в котором я хотел использовать эту dll, также был настроен таким образом (имел те же свойства, что и
/clr
).источник
Столкнулся с похожей проблемой. Я пытался добавить ссылку на dll .net 2.0 в проект .Net 1.1. Когда я попытался добавить предыдущую версию .dll, которая выполнялась в .Net 1.1. у меня это сработало.
источник
Для всех, кто ищет помощь по этому поводу или испытывает FileNotFoundException или FirstChanceException, ознакомьтесь с моим ответом здесь:
Первое случайное исключение типа System.IO.FileNotFoundException произошло в mscorlib.ni.dll - windows phone
В общем, вы должны быть абсолютно уверены, что выполняете все требования для создания ссылки - я знаю, что это очевидный ответ, но вы, вероятно, упускаете из виду относительно простое требование.
источник
У меня была эта ошибка при написании службы Windows. Я запускал Visual Studio от имени администратора, чтобы мои команды пост-сборки автоматически устанавливали мою службу. Я заметил, что когда я закрыл все и запустил VS в обычном режиме (не как администратор), он позволил мне добавить ссылки без ошибок.
Надеюсь, это решение сработает для вас.
источник
Обычно в Visual Studio 2015 вы должны создать проект dll как проект C ++ -> CLR из шаблонов Visual Studio, но вы можете технически включить его постфактум:
Критическое свойство называется
Common Language Runtime Support
установленным в конфигурации вашего проекта. Он находится подConfiguration Properties > General > Common Language Runtime Support
.При этом VS, вероятно, не будет обновлять параметр «Target .NET Framework» (как и должно). Вы можете добавить это вручную, выгрузив проект, отредактировав файл your_project.xxproj и добавив / обновив
Target .NET framework Version
тег XML.В качестве примера я предлагаю создать новое решение в виде проекта C ++ CLR и изучить там XML, возможно, даже изменить его, чтобы убедиться, что в нем нет ничего необычного.
источник
Мой ответ немного запоздал, но в качестве быстрой проверки убедитесь, что вы используете последнюю версию библиотек.
В моем случае после обновления библиотеки nuget, которая ссылалась на другую библиотеку, вызывающую проблему, проблема исчезла.
источник
Вы можете добавить файл .dll вручную. Например, если вы хотите добавить файл dll в свое приложение WPF и не можете ссылаться на него в своем проекте
(Получение ошибки: не удалось добавить ссылку на «.... dll». Убедитесь, что файл доступен и является допустимой сборкой или компонентом COM),
затем СКОПИРУЙТЕ этот файл dll и ВСТАВЬТЕ в ПРОЕКТ УСТАНОВЩИКА (в папку приложения).
источник
источник