2013-05-07 5 views
17

Ho due progetti. Il primo è un progetto di applicazione Windows Form e il secondo è un progetto di libreria di classi. Il progetto della biblioteca di livello superiore funziona con FANN. Windows Form è il progetto di avvio.Come aggiungere una dll di dipendenza nativa esterna?

Dovrei avere Fann.Net.dll and fanndoubleMT.dll per lavorare con il FANN. Ho scaricato queste librerie e le ho inserite in una cartella lib, situata nella radice della soluzione.

Ho aggiunto Fann.Net.dll come dll esterna al progetto della libreria di classi. Ho compilato il progetto. Ho ricevuto un errore che dice "Impossibile caricare DLL 'fanndoubleMT.dll'. Ho corretto questo errore aggiungendo fanndoubleMT.dll alla cartella Windows_Forms_Application \ bin \ Debug.

Penso che questa sia una terribile soluzione al problema, perché io uso Git, e ogni volta che è necessario trasferire dll a questa cartella sul nuovo posto di lavoro.

Cordiali saluti, Denis.

risposta

24

Puoi provare questo:

  1. Add/Existing Item, invece di Aggiungi riferimento.
  2. Utilizzare Aggiungi come collegamento.
  3. Assicurarsi che l'elemento debba essere copiato nella cartella di creazione. Nella proprietà della libreria in VS, impostare Crea azione su contenuto e Copia nella directory di output da copiare se più recente.
  4. Fatto. Ricostruisci e prova.

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

4

non si puo 'Aggiungi riferimento' alla DLL non gestite. una soluzione è quella di aggiungere un Post Build Evento il tuo progetto Windows Form. Qualcosa come: xcopy .. \ lib \ fanndoubleMT.dll $ (TargetPath) L'evento post build può anche essere eseguito un .cmd o file .bat

è ancora necessario il riferimento per l'assembly gestito, 'Fann.Net.dll'

6

È possibile aggiungere la dll nativa come oggetto collegato e utilizzare "Copia se più recente".
Il problema con le DLL native, è che a volte ti consigliamo di utilizzare DLL diverse in base alla configurazione del progetto (Debug/Release o piattaforma).

È possibile modificare csproj del progetto e collegare il dll nativa condizionatamente:

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

Nota l'opzione di copia è impostato su PreserveNewest che significa "copia se più recente".

+0

È inoltre possibile utilizzare le macro $ (configurazione) \ $ (piattaforma) nel valore Includi. Quindi è possibile creare una macro subordinata a Debug che si espande in "_d" (e in niente in non-debug) per ridurlo a un solo ItemGroup. – kornman00

-1
  1. Fare clic destro sul vostro progetto
  2. Scegliere Aggiungi, quindi fare riferimento ...
  3. Nella finestra Reference Manager fare clic su Sfoglia ... (situata nella parte inferiore).
  4. Individua il file .dll, quindi premi Aggiungi.
+1

Non è possibile aggiungere DLL non gestite in questo modo –

0

Se la DLL non si trova nel file bin del progetto, è necessario consentire la copia della DLL.

  1. clic destro sul dll

  2. fare clic su Proprietà

  3. se la copia di directory di output è Non copiare, selezionare Copia sempre

  4. Rigenerare il progetto . Apparirà.