Pregunta

En una compilación exitosa, deseo copiar el contenido del directorio de salida en una ubicación diferente en la misma carpeta " base " . Esta carpeta principal es una parte relativa y puede variar según la configuración de Control de origen.

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 del Dir de salida a la siguiente carpeta:

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

La ubicación base " D: \ GlobalDir \ Version \ AppName " debe recuperarse 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 post build copy?

¿Fue útil?

Solución

Si ninguno de TargetDir u otras macros apuntan al lugar correcto, use el " .. " directorio para ir hacia atrás en la jerarquía de carpetas.

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


Para obtener una lista de todas las macros, consulte aquí:

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

Otros consejos

Esto es lo que desea 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"

Puedes probar:

$(SolutionDir)..\..\

Creo que esto está relacionado, pero tuve un problema al construir directamente usando la línea de comando msbuild (desde un archivo por lotes) vs construir desde dentro de VS.

Usando algo como lo siguiente:

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

(nota: iniciar XCOPY en lugar de XCOPY utilizado para solucionar un problema de permisos que impedía la copia)

La macro $ (SolutionDir) se evaluó como .. \ al ejecutar msbuild desde un archivo por lotes, lo que resultó en el error del comando XCOPY . De lo contrario, funcionó bien cuando se creó desde Visual Studio. Confirmado con / verbosity: diagnostico para ver el resultado evaluado.

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

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

Para activar esto en Visual Studio, vaya a Herramientas / Opciones, luego desplácese hacia abajo en la vista de árbol a la sección llamada Proyectos y soluciones, expanda eso y haga clic en Construir y ejecutar, a la derecha hay un menú desplegable que especifica el construir verbosidad de salida, configurando eso como diagnóstico, le mostrará qué otros valores de macro podría 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 compilación, que incluso ejecutan código SQL como parte de la compilación. Si desea obtener más ayuda o incluso algunos scripts de compilación de muestra, avíseme, pero si es solo un pequeño proceso que desea ejecutar al final de la compilación, quizás el script completo de msbuild sea un poco exagerado .

Espero que ayude Rihan

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top