/ / Come ottenere il sistema di compilazione di Visual Studio per comprendere le dipendenze non gestite delle DLL gestite? - visual-studio, dll, dipendenze, non gestito, gestito

Come ottenere il sistema di compilazione di Visual Studio per comprendere le dipendenze non gestite delle DLL gestite? - visual-studio, dll, dipendenze, non gestito, gestito

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.

Tuttavia, se uno di questi riferimenti è unDLL gestita che dipende da DLL non gestite quindi queste DLL non gestite non vengono copiate nella cartella di output, anche se i progetti corrispondenti nella stessa soluzione sono elencati come dipendenze della DLL gestita.

Mi rendo conto che questo problema può essere risolto daavendo tutti i progetti utilizzare 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 usando in questo 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 c'è un modoper far sì che il sistema di generazione capisca che dovrebbe sempre copiare le dipendenze non gestite della DLL gestita ogni volta che decide di copiare la DLL gestita?

risposte:

5 per risposta № 1

Una soluzione alternativa sembra essere quella di aggiungere un altro nodo al progetto DLL gestito, nominare la DLL non gestita e impostare Build Action = "None" e Copy in Output Directory = "Copy if Newer".

Modifica: per la costruzione di un progetto C ++ / CLR, penso che questo avrebbe funzionato:

Aggiungi il nodo e imposta il suo strumento di compilazione a Strumento di creazione personalizzata. Quindi, nella pagina Passaggio personalizzato, imposta il Comando a copia $ (InputPath) $ (OutDir) e il Uscite a $ (OutDir) $ (inputfilename). Sembra che dovrebbe funzionare.