Evento de comstackción de post de Visual Studio – Copiar a ubicación de directorio relativa

En una comstackción exitosa, deseo copiar el contenido del directorio de salida a una ubicación diferente bajo la misma carpeta “base” . Esta carpeta principal es una parte relativa y puede variar en función de la configuración del control de código fuente.

He enumerado algunos de los valores de Macro disponibles para mí …

$ (SolutionDir) = D: \ GlobalDir \ Version \ AppName \ Solution1 \ build

$ (ProjectDir) = D: \ GlobalDir \ Version \ AppName \ Solution1 \ Version \ ProjectA \

Quiero copiar el contenido de Dir de salida a la siguiente carpeta:

D: \ GlobalDir \ Version \ AppName \ Solution2 \ Project \ Dependency

La ubicación base “D: \ GlobalDir \ Version \ AppName” debe obtenerse de una de las macros anteriores. Sin embargo, ninguno de los valores de macro enumera solo la ubicación principal.

¿Cómo extraigo solo la ubicación base para el comando de copia post comstackción?

Si ninguna de las TargetDir u otras macros apuntan al lugar correcto, utilice el directorio “..” para ir hacia atrás en la jerarquía de carpetas.

es decir. Use $(SolutionDir)\..\.. para obtener su directorio base.


Para la lista de todas las macros, mira aquí:

http://msdn.microsoft.com/en-us/library/c02as0cs.aspx

Esto es lo que quiere poner en la línea de comando del evento Post-build del proyecto:

 copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll" 

EDITAR: O si su nombre de destino es diferente al nombre del proyecto.

 copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll" 

Tu podrías intentar:

 $(SolutionDir)..\..\ 

Creo que esto está relacionado, pero tuve un problema al construir directamente usando la línea de comandos de msbuild (desde un archivo de proceso por lotes) frente a la construcción desde dentro de VS.

Usando algo como lo siguiente:

  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1" start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"  

(Nota: start XCOPY lugar de utilizar XCOPY para evitar un problema de permisos que impidió la copia)

El macro $(SolutionDir) evaluó a ..\ al ejecutar msbuild desde un archivo por lotes, lo que provocó la falla del comando XCOPY . De lo contrario, funcionó bien cuando se creó desde Visual Studio. Confirmado con /verbosity:diagnostic para ver el resultado evaluado.

Usando el macro $(ProjectDir)..\ lugar, que equivale a lo mismo, funcionó bien y retuvo la ruta completa en ambos escenarios de comstackción.

¿No tendría sentido usar msbuild directamente? Si está haciendo esto con cada comstackción, ¿puede agregar una tarea msbuild al final? Si simplemente quisiera ver si no puede encontrar otro valor de macro que no se muestra en el IDE de Visual Studio, podría activar las opciones de msbuild para diagnosticar y eso le mostrará todas las variables que podría usar, como así como su valor actual.

Para activar esto en Visual Studio, vaya a Herramientas / Opciones, desplácese por la vista de árbol a la sección llamada Proyectos y Soluciones, amplíe eso y haga clic en Crear y Ejecutar, a la derecha hay un menú desplegable que especifica la verbosidad de la salida de comstackción. , estableciéndolo en diagnóstico, le mostrará qué otros valores de macro puede usar.

Debido a que no sé exactamente a qué nivel te gustaría ir, y qué tan complejo quieres que sea tu construcción, esto podría darte una idea. Recientemente he estado haciendo scripts de comstackción, que incluso ejecutan código SQL como parte de la comstackción. Si desea más ayuda o incluso algunas secuencias de comandos de comstackción de muestra, avíseme, pero si se trata de un proceso pequeño que desea ejecutar al final de la comstackción, quizás el guión completo de msbuild sea un poco excesivo. .

Espero que ayude a Rihan