ho soluzione VS2010 con 3 progetti:Aggiunta di un percorso DLL nativo per un'applicazione console gestita
- un nativo (C++) DLL
- Un gestito (C#) DLL che utilizza la DLL nativa
- 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:
- Come posso aggiungere la DLL nativa al percorso di ricerca DLL, in modo che io non devo fare una copia manuale?
- 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:
- Aggiungere la DLL nativa come un file (Aggiungi file esistente ...) per il progetto della console gestita.
- 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".
- Chiudere la soluzione o VS2010.
- 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à:- Per la build di debug, invece di
<ItemGroup>
uso<ItemGroup Condition="'$(DefineConstants)' == 'DEBUG;TRACE' ">
e immettere il percorso al Debug DLL. - 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.
- Per la build di debug, invece di
- Salvare il file e riaprire VS2010. La dipendenza dovrebbe ora essere a posto.
Inserirò la DLL nativa come file nella DLL gestita e imposteremo la sua proprietà su "Contenuto" e "Copia su directory di output". – vcsjones
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? –