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

Как я могу решить "Пожалуйста, убедитесь, что файл доступен и является допустимой сборкой или компонентом COM"?

Я строю проект с OpenCV в С#. Для этого требуется файл dll с именем cvextern.dll. но при добавлении этого файла в качестве ссылки появляется следующее сообщение: -

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

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

4b9b3361

Ответ 2

В моем случае мне пришлось зарегистрировать .dll.

Для этого откройте cmd.exe (консоль) с правами администратора и введите:

regsvr32 "foo.dll"

Ответ 3

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

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

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

TlbImp.exe cvextern.dll        //where cvextern.dll is your dll you want to fix.

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

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

  • Открыть cmd

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

    dir tlbimp.exe /s              //this will locate the file.
    
  • Запустите tlbimp.exe и поместите его dll за ним. Пример. Если вы dll - cvextern.dll. Вы можете запустить:

    TlbImp.exe cvextern.dll
    
  • В папке tlbimp.exe была создана новая dll. Вы можете использовать это как ссылку в своем проекте.

Ответ 4

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

Ответ 5

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

Я использую Windows 7, откройте "Командная строка" → "Администратор". зарегистрируйте свою <... > . dll.

Зачем запускать в качестве администратора, вы можете зарегистрировать вашу <... > . dll с помощью запуска в Windows Start, но все же ваша dll будет запускаться только как пользователь, даже если ваша учетная запись является администратором.

Теперь вы можете добавить свою <... > . dll в Project- > Add Reference- > Browse

Спасибо

Ответ 6

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

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

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

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

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

if (!File.Exists(Properties.Resources.DllName))
{
    var outStream = new StreamWriter(Properties.Resources.DllName, false);
    var binStream = new BinaryWriter(outStream.BaseStream);
    binStream.Write(Properties.Resources.DllFile);
    binStream.Close();
}

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

Ответ 7

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

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

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

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

Ответ 8

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

<files>
    <file src="bin\*.dll" target="lib" />
</files>

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

<references>
    <reference file="Managed1.dll" />
    <reference file="Managed2.dll" />
</<references>

Замечание: родительские ссылки - это метаданные → в соответствии с документацией https://docs.microsoft.com/en-us/nuget/reference/nuspec#general-form-and-schema

Документация: https://docs.microsoft.com/en-us/nuget/reference/nuspec