Не может добавить ссылку .NET
У меня есть DLL, которую я хотел бы добавить в качестве ссылки на мой проект, но каждый раз, когда я пытаюсь это сделать, появляется всплывающее сообщение:
Ссылка не может быть добавлена. Убедитесь, что файл доступен, и что он является допустимым компонентом сборки или COM.
Я немного исследовал и выяснил, что ошибка связана с тем, что сборка неуправляема .NET и что я должен использовать атрибут DLLImport, однако у меня есть то же точное решение на другом компьютере, и каждый из них работает нормально.
Разница в том, что новый компьютер, к которому я пытаюсь добавить ссылку, - x64, а старый - x86.
У меня есть и x64, и x86 DLL, и я не могу их добавить. Почему это происходит?
Ответы
Ответ 1
Вы не можете добавлять неуправляемые библиотеки DLL в качестве ссылок в Visual Studio, независимо от 32/64 "bittyness". И я сомневаюсь, что он работал на вашей машине x86.
Есть разница между "нормальными" DLL и COM-DLL.
Вы можете добавить ссылку на COM-DLL после ее регистрации в системе (на самом деле вы ссылаетесь на открытый COM-объект, и ссылка на DLL добавляется автоматически). Это можно сделать на "COM" -Tab диалогового окна "Добавить ссылку" (здесь вы должны убедиться, что в большинстве случаев ваш проект построен как цель x86).
"normal" DLL могут - как я уже сказал, - не добавляться вообще. Вы можете включить их в решение (щелкните правой кнопкой мыши, выберите "Добавить существующий файл" ), но они не будут указаны, если вы не объявите что-то вроде
[DllImport("...")]
public static extern void MyFunction();
Я подозреваю, что в вашем другом решении есть какая-то DLL-оболочка, которую вы на самом деле ссылаетесь и которая содержит импорт DLL.
Ответ 2
На ваш вопрос есть ответы multiple:
-
вы можете столкнуться с этой проблемой, потому что сборка, которую вы пытаетесь добавить, нацелена и скомпилирована для архитектуры процессора x86. Просто попробуйте изменить целевую платформу от x64 до x86, и даже если этот постулат работает, попробуйте изменить его на AnyCPU. Платформа AnyCPU Platform делает ваше приложение исполняемым для обоих типов архитектуры, потому что оно без архитектуры.
-
Если сборка является DLL, и ее нельзя добавить в качестве ссылки, то она не COM, а также .NET. Это будет родная сборка, как и другие (например, shell32.dll, user32.dl и т.д.). Вы должны использовать их с помощью атрибута DllImport, но сначала вы должны проверить документацию документации этой DLL, чтобы получить список функций, реализованных в этой DLL.
Ответ 3
Возможно, может помочь Импортщик библиотеки типов (Tlbimp.exe). Он создает оболочку .NET dll. Оригинальная COM-библиотека DLL должна быть там и должна быть зарегистрирована! (Попробуйте сначала зарегистрировать его, прежде чем попробовать его с помощью TlbImp.)
Если 64-разрядная версия не работает, установите целевую платформу x84
в свойствах сборки проекта.
Ответ 4
Некоторые DLL нельзя добавить в качестве ссылки, но, тем не менее, они все еще могут использоваться С# со знаменитым [DllImport( params go here...)]
Вам также может понадобиться inspect
dll, чтобы получить адрес функций, которые вы хотите использовать. Это может быть достигнуто с помощью GetProcAddress
Ответ 5
Добавить абсолютный путь к dll в DllImport
Ответ 6
пытаясь проанализировать проблему, я обнаружил следующее
[1] иногда вы видите ссылку в диспетчере ссылок, но вы не найдете DLL файлы в указанном каталоге, где
диспетчер ссылок не может актуализировать ссылки.
[2] проверьте разрешение вашего файла dll.
Ответ 7
Попробуйте изменить целевую платформу с любого процессора на x86. (свойства проекта → Build → Platform Target)