Me pregunto si alguien podría ayudarme con algunos scripts de msbuild que estoy tratando de escribir. Lo que me gustaría hacer es copiar todos los archivos y subcarpetas de una carpeta a otra usando msbuild.
{ProjectName}
|----->Source
|----->Tools
|----->Viewer
|-----{about 5 sub dirs}
Lo que necesito poder hacer es copiar todos los archivos y subcarpetas de la carpeta de herramientas a la carpeta de depuración de la aplicación. Este es el código que tengo hasta ahora.
<ItemGroup>
<Viewer Include="..\$(ApplicationDirectory)\Tools\viewer\**\*.*" />
</ItemGroup>
<Target Name="BeforeBuild">
<Copy SourceFiles="@(Viewer)" DestinationFolder="@(Viewer->'$(OutputPath)\\Tools')" />
</Target>
El script de compilación se ejecuta pero no copia ninguno de los archivos o carpetas.
Gracias
scripting
msbuild
build-process
build
Nathan W
fuente
fuente
%(RecursiveDir)
a la carpeta de destino recreará la estructura del directorio. De lo contrario, la salida es plana. Esta es la mejor respuesta.Creo que el problema podría estar en cómo está creando su ItemGroup y llamando a la tarea Copiar. Vea si esto tiene sentido:
fuente
CreateItem
la tarea está en desuso. regex tiene la alternativa. msdn.microsoft.com/en-us/library/s2y3e43x.aspxSoy un poco nuevo en MSBuild, pero encuentro que la tarea EXEC es útil para situaciones como estas. Me encontré con el mismo desafío en mi proyecto y esto funcionó para mí y fue mucho más simple. Alguien, por favor, avíseme si no es una buena práctica.
fuente
Copy
tarea en lugar de un comando es la compatibilidad. He construido en Linux usando Mono antes, y obviamentexcopy
no funciona allí.\**\*.*
ayuda a obtener archivos de toda la carpeta. RecursiveDir ayuda a poner todo el archivo en la carpeta respectiva ...fuente
CreateItem
la tarea está en desuso. regex tiene la alternativa. msdn.microsoft.com/en-us/library/s2y3e43x.aspx¿Intentó especificar un directorio de destino concreto en lugar de
No soy muy competente con la sintaxis avanzada de MSBuild, pero
me parece extraño. El script se ve bien, por lo que el problema puede estar en los valores de
$(ApplicationDirectory)
y$(OutputPath)
EDITAR:
Aquí hay una publicación de blog que podría ser útil:
Cómo: copiar archivos de forma recursiva mediante la tarea
fuente
Este es el ejemplo que funcionó:
fuente: https://msdn.microsoft.com/en-us/library/3e54c37h.aspx
fuente
Esta es la tarea de copia que utilicé en mi propio proyecto, funcionó perfectamente para mí que copia la carpeta con subcarpetas al destino con éxito:
En mi caso, copié la carpeta de publicación de un proyecto en otra carpeta de destino, creo que es similar a su caso.
fuente
Personalmente, he hecho uso de CopyFolder, que es parte de la biblioteca de tareas de SDC.
http://sdctasks.codeplex.com/
fuente
La mejor manera de copiar archivos de forma recursiva de un directorio a otro usando MSBuild es usando la tarea Copiar con SourceFiles y DestinationFiles como parámetros. Por ejemplo: copiar todos los archivos del directorio de compilación al directorio de respaldo será
Ahora, en el comando Copiar anterior, todos los directorios de origen se recorren y los archivos se copian en el directorio de destino.
fuente
Si está trabajando con una cadena de herramientas típica de C ++, otra forma de hacerlo es agregar sus archivos a la lista estándar CopyFileToFolders
Además de ser simple, esta es una buena manera de hacerlo porque la tarea CopyFilesToFolders generará entradas, salidas e incluso archivos TLog adecuados, por lo que se asegurará de que las operaciones de copia se ejecuten solo cuando uno de los archivos de entrada haya cambiado o falta uno de los archivos de salida. Con TLog, Visual Studio también reconocerá correctamente el proyecto como "actualizado" o no (utiliza un mecanismo U2DCheck separado para eso).
fuente