Как добавить внешнюю DLL зависимой зависимости?
У меня есть два проекта. Сначала это проект приложения Windows Forms, а второй - проект библиотеки классов. Проект библиотеки стекла работает с FANN. Windows Forms - это проект запуска.
Я должен был Fann.Net.dll и fanndoubleMT.dll работать с FANN. Я загрузил эти библиотеки и поместил их в папку lib, расположенную в корне решения.
Я добавил Fann.Net.dll в качестве внешней dll в проект библиотеки классов. Я составил проект. Я получил сообщение об ошибке "Не удалось загрузить DLL" fanndoubleMT.dll ". Я исправил эту ошибку, добавив fanndoubleMT.dll в папку Windows_Forms_Application\bin\Debug.
Я думаю, что это ужасное решение проблемы, потому что я использую git и каждый раз, когда вам нужно перенести dll в эту папку на новом рабочем месте.
С уважением, Денис.
Ответы
Ответ 1
Вы можете попробовать следующее:
- Добавить/Существующий элемент вместо Добавить ссылку.
- Используйте ссылку "Добавить как".
- Убедитесь, что элемент должен быть скопирован в папку сборки. В свойстве библиотеки в VS установите для параметра "Создать действие к контенту" и "Копировать в выходной каталог для копирования", если "Создать".
- Готово. Перестройте и протестируйте.
Предлагается в ссылке http://social.msdn.microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum=vssmartdevicesvbcs.
Ответ 2
Вы можете добавить родную dll как связанный элемент и использовать " Копировать, если новый".
Проблема с родными dll заключается в том, что иногда вам нужно использовать разные dll в соответствии с конфигурацией проекта (Debug/Release или platform).
Вы можете отредактировать проект .csproj и связать родную dll условно:
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
<Content Include="..\..\..\..\..\bin\Win32\Release\fanndoubleMT.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
<Content Include="..\..\..\..\..\bin\Win32\Debug\fanndoubleMT_d.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<Content Include="..\..\..\..\..\bin\x64\Debug\fanndoubleMT_d.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<Content Include="..\..\..\..\..\bin\x64\Release\fanndoubleMT.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Обратите внимание, что для параметра копирования установлено значение PreserveNewest, что означает "копировать, если новый".
Ответ 3
Вы не можете "Добавить ссылку" на неуправляемые DLL.
Одним из решений является добавление события Post Build в ваш проект Windows Forms.
Что-то вроде: xcopy..\lib\fanndoubleMT.dll $(TargetPath)
Событие post build также может выполнять файл .cmd или .bat
Вам все еще нужна ссылка на управляемую сборку "Fann.Net.dll"
Ответ 4
- Щелкните правой кнопкой мыши на своем проекте
- Выберите Добавить, затем Ссылка...
- В окне диспетчера ссылок нажмите "Обзор..." (находится внизу).
- Найдите свою .dll и нажмите "Добавить".
Ответ 5
Если DLL не находится в файле bin проекта, вы должны разрешить копирование dll.
-
Щелкните правой кнопкой мыши по вашей DLL
-
Нажмите свойства
-
Если каталог "Копировать в вывод" Не копировать, выберите Копировать всегда
-
Восстановите проект. Он появится.