2009-12-30 11 views
9

Quando si crea codice gestito, Visual Studio correttamente (e in modo ricorsivo) copia le DLL dei progetti gestiti referenziati nella cartella di output del progetto in corso di creazione.Come ottenere il sistema di compilazione di Visual Studio per comprendere le dipendenze non gestite delle DLL gestite?

Tuttavia, se uno di questi riferimenti è una DLL gestita che dipende da dll non gestite, queste DLL non gestite non vengono copiate nella cartella di output, anche se i progetti corrispondenti nella stessa soluzione sono elencate come dipendenze del managed DLL.

Mi rendo conto che questo problema può essere risolto facendo in modo che tutti i progetti utilizzino la stessa cartella di output. Lo facciamo già per la maggior parte dei progetti, ma preferiamo mantenere separate le cartelle di output unit test, causando il problema di cui sopra per i test unitari che utilizzano una Dll gestita con dipendenze non gestite.

La soluzione che stiamo utilizzando al momento è un evento di pre-build per copiare le DLL necessarie, ma questo fa perdere tempo ed è soggetto ad errori in quanto deve essere ripetuto per ogni progetto che utilizza la DLL gestita.

Vorrei quindi sapere se esiste un modo per far capire al sistema di generazione che deve sempre copiare le dipendenze non gestite della DLL gestita ogni volta che decide di copiare la DLL gestita?

risposta

5

Una soluzione alternativa sembra essere quella di aggiungere un altro nodo al progetto DLL gestito, denominando la DLL non gestita e impostando Azione build = "Nessuno" e Copia in directory di output = "Copia se più recente".

Modifica: Per la costruzione di un progetto di C++/CLR, credo che questo dovrebbe funzionare:

aggiungere il nodo, e impostare il suo strumento di generazione per generazione personalizzata strumento. Poi, nella pagina Passaggio generazione personalizzate, impostare il comando a copia $ (InputPath) $ (OutDir) e le uscite a $ (outdir) \ $ (inputfilename). Sembra che dovrebbe funzionare.

+0

Sembra un'eccellente soluzione. Almeno è gestito in un'unica posizione in questo modo. Lo proverei appena avrò il tempo di assicurarmi che funzioni correttamente. Mi piacerebbe comunque sapere se esiste una soluzione completamente automatizzata. – Ziphnor

+0

Credo che la soluzione potrebbe funzionare per i progetti C# gestiti. Tuttavia, il progetto gestito nel nostro scenario è un progetto CLR C++. Nei progetti C++ CLR non esiste alcuna proprietà "Copia nella directory di output" per gli elementi del progetto, come avviene nei progetti C#. C'è un altro modo per specificare tale azione? – Ziphnor

+0

@Ziphnor: modificato il mio post per includere un metodo che dovrebbe funzionare con progetti C++/CLR. – Tarydon

Problemi correlati