2011-02-10 12 views
10

que darse cuenta de que esta pregunta se ha hecho antes - pero ninguna de las respuestas aplicar a mi caso concreto:Visual Studio: DLL dependientes de copia de destino de carpeta

  • tengo una solución que contiene un nativo de C++ proyecto EXE , que a su vez depende de más de 40 proyectos nativos de C++ DLL (en la misma solución).

  • El proyecto EXE tiene la configuración habitual depuración, lanzamiento (y Perfil), pero desde entonces misma base de código fuente se utiliza para construir tres diferentes aplicaciones (por ejemplo A1, A2 y A3). Además, apunta a x32 y x64, por lo que hay un total de 3 x 3 x 2 = 18 configuraciones de proyecto.

  • Los proyectos DLL son compartidas por las tres aplicaciones de destino, por lo que solamente 3 son ( de depuración, lanzamiento, perfil) Tiempos 2 (x32, x64) = 6 configuraciones.

  • Dado que el proyecto EXE depende de las DLL, necesita copiar la salida relevante de los proyectos DLL a su carpeta de destino (o una subcarpeta de la misma) cada vez que se modifiquen.

¿Cómo manejarías la actualización de las DLL?

  • Una acción posterior a la generación en cada proyecto DLL no funciona (bien), ya que tendría que copiar el archivo DLL en la carpeta de salida correspondiente de A1, A2 y A3. Cualquier cambio en una carpeta de salida resulta en tener que modificar la acción posterior a la construcción en cada uno de los 50 proyectos DLL.

  • Actualmente agregué las DLL mismas como elementos de proyecto para el proyecto EXE, y configuré una herramienta de compilación personalizada para copiarla en la carpeta de salida. Pero eso requiere que agregue cada DLL 6 veces, ¡así que termino con 6 x 50 = 300 DLL!

Lo que realmente necesito es algo así como la opción Copiar local, que desafortunadamente solo funciona en ensamblajes. ¿Alguna solución sugieres para simplificar esta configuración de compilación?

Respuesta

5

Lo que haría es poner todas las DLL en una sola carpeta (específica para Debug/Release etc) y copiarlas de nuevo a la carpeta de salida apropiada de su EXE.

Esto se puede hacer en sólo dos acciones:

  • Establecer el directorio de salida de todas las DLL en una carpeta como $(ConfigurationName)_$(PlatformShortName)

    • seleccionar todo DLL proyecta
    • botón derecho -> propoerties
    • seleccionar todas las configuraciones y todas las plataformas
    • configurar el outp ut dir
  • Añadir una acción posterior a la generación al proyecto EXE, común a todas las configuraciones que las copias $(ConfigurationName)_$(PlatformShortName)\*.dll a $(TargetDir)

EDITAR

Hay un problema en la segunda paso desde el $(ConfigurationName) de su EXE no es lo mismo que sus proyectos DLL. No estoy seguro, pero tal vez pueda obtener una forma de deducir la configuración correspondiente, para poder tener un solo evento de post-construcción para sus 18 configuraciones. Puede ser una nueva pregunta SO :)

+0

¡Excelente! ¿Por qué no lo pensé antes? –

+0

Me alegro de que te haya gustado :) ver mi edición por un problema, sin embargo ... – CharlesB

+0

Sí, me di cuenta. Pero eso es manejable, solo significa que habrá tres acciones de post-construcción ligeramente diferentes. –

Cuestiones relacionadas