Как добавить внешнюю 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

  • Нажмите свойства

  • Если каталог "Копировать в вывод" Не копировать, выберите Копировать всегда

  • Восстановите проект. Он появится.