2013-05-07 11 views
17

Mam dwa projekty. Pierwszy to projekt aplikacji Windows Forms Application, a drugi to projekt biblioteki klas. Projekt biblioteki Сlass współpracuje z FANN. Windows Forms to projekt startowy.Jak dodać zewnętrzną natywną bibliotekę zależności?

Powinienem mieć Fann.Net.dll and fanndoubleMT.dll do pracy z FANN. Pobrałem te biblioteki i umieściłem je w folderze lib, znajdującym się w katalogu głównym rozwiązania.

Dodałem Fann.Net.dll jako zewnętrzną bibliotekę DLL do projektu biblioteki klas. Przygotowałem projekt. Wystąpił błąd z informacją "Nie można załadować biblioteki DLL" fanndoubleMT.dll "Naprawiłem ten błąd, dodając plik fanndoubleMT.dll do folderu Windows_Forms_Application \ bin \ Debug.

Myślę, że to jest straszne rozwiązanie problemu, ponieważ używam git, i za każdym razem trzeba przenieść dll do folderu na nowym miejscu pracy.

poważaniem Denis.

Odpowiedz

24

Możesz spróbować tego:

  1. dodać/Existing Item, zamiast Dodaj referencję.
  2. Użyj Dodaj jako łącze.
  3. Upewnij się, że element ma zostać skopiowany w folderze kompilacji. We właściwości biblioteki w VS ustaw opcję Buduj działanie na zawartość i Kopiuj do katalogu wyjściowego, aby skopiować, jeśli jest nowsza.
  4. Gotowe. Przebuduj i przetestuj.

Sugerowana w linku http://social.msdn.microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum=vssmartdevicesvbcs.

4

nie można „add Reference” do niezarządzanych DLL. Jednym z rozwiązań jest dodanie Utwórz zdarzenie w projekcie Windows Forms: Coś takiego jak: xcopy .. \ lib \ fanndoubleMT.dll $ (TargetPath) Zdarzenie kompilacji postów może również zostać wykonane .cmd lub .bat plik

Trzeba jeszcze odniesienie do zarządzanego zespołu, 'Fann.Net.dll'

6

Możesz dodać rodzimą bibliotekę DLL jako połączony element i użyć "Skopiuj, jeśli nowsza".
Problem z natywnymi bibliotekami dll polega na tym, że czasami będziesz chciał używać różnych bibliotek dll zgodnie z konfiguracją projektu (Debug/Release lub platforma).

można edytować .csproj projektu i odwołuje dll natywną warunkowo:

<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> 

Uwaga opcja kopiowania jest ustawiona na PreserveNewest co oznacza „kopię jeśli nowsze”.

+0

Można również użyć makr $ (Konfiguracja) \ $ (Platforma) w wartości Uwzględnij. Następnie można utworzyć makro, które jest zależne od debugowania, które rozszerza się do "_d" (i do niczego w braku debugowania), aby zmniejszyć to do tylko jednej ItemGroup. – kornman00

-1
  1. prawym przyciskiem myszy na projekcie
  2. Wybierz Dodaj, a następnie Reference ...
  3. w menedżerze referencyjny oknie kliknij przycisk Browse ... (znajduje się na dole).
  4. Zlokalizuj plik .dll, a następnie naciśnij przycisk Dodaj.
+1

Nie można w ten sposób dodawać niezarządzanych bibliotek dll –

0

Jeśli dll nie znajduje się w pliku bin projektu, należy zezwolić na skopiowanie biblioteki dll.

  1. prawym przyciskiem myszy na swojej dll

  2. właściwości Kliknij

  3. Jeśli Kopiuj do Output Directory jest Nie kopiuj wybierz Kopiuj zawsze

  4. Odbuduj projekt . Pojawi się.

Powiązane problemy