visual-studio msbuild visual-studio-2012 xcopy post-build-event

visual studio - VS 2012: Post Build xcopy error 2



visual-studio msbuild (3)

¿Intentaste envolver el $ (TargetPath) entre comillas? Los siempre tan populares personajes espaciales, en lugar de guiones bajos en todos los productos de MS tienden a arruinar las cosas en cada esquina ... No sé por qué esos tontos siguen haciéndolo ...

Como así: si existe "$ (TargetPath)"

Quiero hacer que VS copie el archivo .lib que creó después del proceso de construcción en una carpeta específica. Así que fui a la configuración del proyecto, evento posterior a la compilación, e ingresé el siguiente comando:

if exist $(TargetPath) xcopy "$(TargetPath)" "C:/Users/Incubbus/Documents/Visual Studio 2010/My Libraries/z.lib" /Y

Pero en lugar de copiar, el proceso falla después de hacer clic en "compilar" y recibo el siguiente error:

error MSB3073: el comando "si existe C: / Users / Incubbus / Documents / Visual Studio 2010 / My Libraries / MyNetWorkProject / Debug / IncNetworkLibD.lib xcopy" C: / Users / Incubbus / Documents / Visual Studio 2010 / My Libraries / MyNetWorkProject / Debug / IncNetworkLibD.lib "" C: / Users / Incubbus / Documents / Visual Studio 2010 / My Libraries / z.lib "/ Y

: VCEnd "salió con el código 2.

También me estoy preguntando acerca de :VCEnd en la cadena de comandos del mensaje de error <- ¿Quizás esta es la razón? ¿Cómo resolver esto?

Cualquier ayuda y sugerencias serían felizmente consumidas:) ...

solución parcial

EDITAR : parece que la parte de cambio de nombre ( Inc.lib to z.lib ) z.lib problemas, cuando xcopy pregunta si se trata de un archivo o un directorio ... funciona cuando copio el archivo originalmente nombrado en un directorio en lugar de copiar renombrado


¿Por qué no usas copy en lugar de xcopy? La copia es específicamente para archivos, por lo que no habrá confusión.


La documentación de Xcopy dice lo siguiente:

Especificación de si el destino es un archivo o directorio Si el destino no contiene un directorio existente y no termina con una barra invertida (/), aparece el siguiente mensaje:

Does destination specify a file name or directory name on the target (F = file, D = directory)?

Presione F si desea que el archivo o los archivos se copien en un archivo. Presione D si desea que el archivo o los archivos se copien en un directorio.

Puede suprimir este mensaje utilizando la opción de línea de comandos / i, que hace que xcopy suponga que el destino es un directorio si el origen es más de un archivo o un directorio.

Necesitas lo contrario, pero no hay tal interruptor.

La solución se propone aquí: https://.com/a/4283533/532647 .

Se sugiere xcopy comando xcopy con echo f | prefijo, que básicamente hace lo siguiente: simula a un usuario presionando la tecla f cuando xcopy pregunta.

Entonces tu orden debería verse como:

if exist $(TargetPath) echo f | xcopy "$(TargetPath)" "C:/Users/Incubbus/Documents/Visual Studio 2010/My Libraries/z.lib" /Y

Operador | simplemente canaliza la salida de echo f (== f ) en el comando xcopy y se lee cuando sea apropiado. Más información sobre la redirección de salida aquí: http://ss64.com/nt/syntax-redirection.html .

ACTUALIZACIÓN: Como señala Govert, este hack no funcionará bajo una versión localizada de Windows. Sin embargo, otro hack funcionará:

xcopy D:/file.zip c:/renamedFile.zip*

Agregar el nombre del archivo de destino con un asterisco * hace que xcopy no pregunte si el destino es un archivo o un directorio.