Как я могу решить "Пожалуйста, убедитесь, что файл доступен и является допустимой сборкой или компонентом COM"?
Я строю проект с OpenCV в С#. Для этого требуется файл dll с именем cvextern.dll
. но при добавлении этого файла в качестве ссылки появляется следующее сообщение: -
ссылка "cvextern.dll" не может быть добавлена, убедитесь, что файл доступен и что он является допустимым компонентом сборки или COM.
Я устал от поиска, я провел последние 2 дня в поиске решения этой проблемы
Ответы
Ответ 1
файл является родной DLL, что означает, что вы не можете добавить его в .NET-проект через Add Reference... вы можете использовать его через DllImport (см. http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx)
Ответ 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