не могу добавить ссылку .NET - PullRequest
10 голосов
/ 08 марта 2012

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

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

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

Разница в том, что новый компьютер, который я пытаюсь добавить, - это x64, а старый - x86.

У меня есть как x64, так и x86 DLL, и я не могу их добавить. Почему это происходит?

Ответы [ 7 ]

12 голосов
/ 08 марта 2012

Вы не можете добавлять неуправляемые библиотеки DLL в качестве ссылок в Visual Studio независимо от 32/64 "битности".И я сомневаюсь, что это сработало на вашем компьютере с архитектурой x86.

Существует разница между "обычными" DLL и COM-DLL.

Вы можете добавить ссылку на COM-DLL после того, как она была зарегистрирована в системе (фактически вы ссылаетесь на открытый COM-объект, и ссылка на DLL добавляется автоматически).Это можно сделать в «COM» -Tab диалогового окна «Добавить ссылку» (здесь вы должны убедиться, что ваш проект в большинстве случаев построен как цель x86).

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

[DllImport("...")]
public static extern void MyFunction();

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

2 голосов
/ 08 марта 2012

На ваш вопрос есть несколько ответов:

  1. вы можете столкнуться с этой проблемой, потому что сборка, которую вы пытаетесь добавить, предназначена и скомпилирована для процессора x86архитектура.Просто попробуйте изменить Целевую платформу с x64 на x86 , и даже если это сработает, попробуйте изменить ее на AnyCPU .Цель AnyCPU Platform делает ваше приложение исполняемым на обоих типах архитектуры, поскольку оно не имеет архитектуры.

  2. Если сборка оказывается DLL, и ее нельзя добавить в качестве ссылки, тоэто не a COM , а также .NET сборка.Это будет собственная сборка, как и другие (например, shell32.dll, user32.dl и т. Д.).Вы должны использовать их через атрибут DllImport , но сначала вы должны проверить документацию этого dll, чтобы получить список функций, реализованных в этом dll.

1 голос
/ 08 марта 2012

Возможно, может помочь Импорт библиотеки типов (Tlbimp.exe) . Он создает оболочку .NET DLL. Оригинальная COM DLL должна быть там и должна быть зарегистрирована! (Попробуйте сначала зарегистрировать его, прежде чем пытаться использовать TlbImp.)

Если 64-разрядная версия не работает, задайте для платформы целевое значение x84 в свойствах сборки проекта.

0 голосов
/ 11 ноября 2016

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

[1], иногда вы видите ссылку в менеджере ссылок, но вы не найдете dll-файлы в упомянутом каталоге, где находится менеджер ссылок.не удалось актуализировать ссылки.

[2] проверьте разрешение вашего dll-файла.

0 голосов
/ 28 октября 2016

Добавить абсолютный путь dll к DllImport

0 голосов
/ 08 марта 2012

Некоторые DLL не могут быть добавлены в качестве ссылки, но, тем не менее, они все еще могут использоваться C # со знаменитым [DllImport( params go here...)]

. Вам также может понадобиться inspect dll, чтобы получить адресиз функций, которые вы хотите использовать.Это может быть достигнуто с помощью GetProcAddress

0 голосов
/ 08 марта 2012

Попробуйте изменить целевой объект платформы с любого процессора на x86.(свойства проекта -> Построить -> Цель платформы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...