2013-01-08 16 views
5

ho soluzione VS2010 con 3 progetti:Aggiunta di un percorso DLL nativo per un'applicazione console gestita

  1. un nativo (C++) DLL
  2. Un gestito (C#) DLL che utilizza la DLL nativa
  3. A console gestita (C#) che utilizza la DLL gestita

Posso impostare la DLL gestita come riferimento all'app della console, ma non posso impostare la DLL nativa come tale riferimento.

Per eseguire l'app della console da VS2010 senza un arresto anomalo, è necessario copiare la DLL nativa nella cartella .exe.

Ho 2 domande:

  1. Come posso aggiungere la DLL nativa al percorso di ricerca DLL, in modo che io non devo fare una copia manuale?
  2. Come posso fare in modo che ogni configurazione (Debug/Release) abbia la versione DLL corretta?

soluzione più dettagliata - a causa di Tilak's answer:
Qui ci sono più newbie dettagli amichevoli basano Tilak's reply di seguito:

  1. Aggiungere la DLL nativa come un file (Aggiungi file esistente ...) per il progetto della console gestita.
  2. Nel riquadro delle proprietà del progetto, impostare "Crea azione" su "Contenuto" e "Copia nella directory di output" su "Copia se più recente" o "Copia sempre".
  3. Chiudere la soluzione o VS2010.
  4. Aprire il file gestito del progetto .csproj in un editor di testo e trovare lo <ItemGroup> che include il nome DLL nativo (questo è stato creato quando abbiamo aggiunto il file nel passaggio 1). Faremo una serie di piccoli cambiamenti là:
    1. Per la build di debug, invece di <ItemGroup> uso <ItemGroup Condition="'$(DefineConstants)' == 'DEBUG;TRACE' "> e immettere il percorso al Debug DLL.
    2. Duplicare la voce per la build di rilascio e invece di <ItemGroup> utilizzare <ItemGroup Condition="'$(DefineConstants)' != 'DEBUG;TRACE' "> e immettere il percorso per la DLL Release.
  5. Salvare il file e riaprire VS2010. La dipendenza dovrebbe ora essere a posto.
+2

Inserirò la DLL nativa come file nella DLL gestita e imposteremo la sua proprietà su "Contenuto" e "Copia su directory di output". – vcsjones

+0

Puoi essere più specifico su come farlo (magari riformulare come risposta)? Inoltre, questo metodo può essere usato per differenziare i build di Debug e Release? –

risposta

6

È possibile con copia i file in post evento costruire,

o

Aggiungi file come risorse.

Come posso fare in modo che ogni configurazione (Debug/Release) abbia la versione DLL corretta?

È possibile utilizzare $(ConfigurationName) nell'evento di post-generazione per scoprire la modalità di debug/rilascio. E di conseguenza puoi fare riferimento alle librerie.

Se si utilizza l'approccio delle risorse, è necessario modificare il file di progetto da copiare in base alla modalità di debug/rilascio. Vedere i dettagli here

+0

Sì, sono a conoscenza dell'opzione di copia post-generazione. Speravo di evitarlo dato che mette la responsabilità della copia sulla DLL nativa invece del progetto dipendente. Per ogni nuovo progetto dipendente devo modificare la configurazione del progetto di compilazione nativa della DLL. –

+0

In alternativa, come si aggiungono i file come risorse dipendenti dalla build? –

+1

Aggiungi la DLL ai progetti come file. Imposta l'azione di generazione sui contenuti. Modificare il file di progetto nell'editor di testo preferito, definire i gruppi di articoli corrispondenti al debug e rilasciare separatamente. Simile a come vengono mantenuti diversi gruppi di proprietà per x86 e x64. – Tilak

Problemi correlati