2013-05-07 4 views
17

У меня есть два проекта. Сначала это проект приложения Windows Forms, а второй - проект библиотеки классов. Проект библиотеки «Стекло» работает с FANN. Windows Forms - это проект запуска.Как добавить внешнюю DLL-зависимость?

У меня должно было быть Fann.Net.dll and fanndoubleMT.dll для работы с FANN. Я загрузил эти библиотеки и поместил их в папку lib, расположенную в корне решения.

Я добавил Fann.Net.dll как внешнюю dll в проект библиотеки классов. Я составил проект. Я получил сообщение об ошибке «Не удалось загрузить DLL« fanndoubleMT.dll ». Я исправил эту ошибку, добавив fanndoubleMT.dll в папку Windows_Forms_Application \ bin \ Debug.

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

с уважением, Денис.

ответ

24

Вы можете попробовать это:

  1. Добавить/существующий элемент, а Добавить ссылку.
  2. Используйте ссылку «Добавить как ссылку».
  3. Убедитесь, что элемент должен быть скопирован в папку сборки. В свойстве библиотеки в VS установите для параметра «Создать действие для содержимого» и «Копировать в выходной каталог» для копирования, если «Создать».
  4. Выполнено. Перестроить и проверить.

Предлагается по ссылке http://social.msdn.microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum=vssmartdevicesvbcs.

4

вы не можете «Добавить ссылку» неуправляемым библиотек DLL. Одним из решений является, чтобы добавить Post Build Событие вашего проекта Windows Forms. Что-то вроде: xcopy .. \ lib \ fanndoubleMT.dll $ (TargetPath) Событие post build также может выполнять .cmd или .bat файл

Вы все еще нуждаются в ссылке на управляемую сборку, «Fann.Net.dll»

6

Вы можете добавить родную dll как связанный элемент и использовать «Copy if newer».
Проблема с родными 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, что означает «копию, если новее».

+0

Вы также можете использовать макросы $ (Configuration) \ $ (Platform) в значении Include. Затем вы можете создать макрос, который является условным для Debug, который расширяется до «_d» (и ни к чему не отлаживается), чтобы уменьшить это до одной ItemGroup. – kornman00

-1
  1. правой кнопкой мыши на вашем проекте
  2. Выберите Добавить, затем ссылку ...
  3. В Reference Manager окне нажмите Browse ... (расположен в нижней части).
  4. Найдите свою .dll, а затем нажмите кнопку Добавить.
+1

Невозможно добавить неуправляемые DLL таким образом –

0

Если dll не находится в файле bin проекта, вы должны разрешить копирование dll.

  1. Щелкните правой кнопкой мыши на библиотеки DLL

  2. Нажмите свойства

  3. Если Копировать в выходной каталог является Не копируйте, выберите Copy всегда

  4. Перестроить проект , Он появится.

Смежные вопросы