scripting - ubicacion - Copie todos los archivos y carpetas usando msbuild
explorador de archivos mac (8)
¿Intentó especificar el directorio de destino concreto en lugar de
DestinationFolder="@(Viewer->''$(OutputPath)//Tools'')" ?
No soy muy competente con la sintaxis avanzada de MSBuild, pero
@(Viewer->''$(OutputPath)//Tools'')
me parece extraño La secuencia de comandos se ve bien, por lo que el problema podría estar en los valores de $(ApplicationDirectory)
y $(OutputPath)
EDITAR:
Aquí hay una publicación de blog que podría ser útil:
Me preguntaba 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 hacer es copiar todos los archivos y subcarpetas de la carpeta de herramientas a la carpeta de depuración para 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 construcción se ejecuta pero no copia ninguno de los archivos o carpetas.
Gracias
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:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<YourDestinationDirectory>../SomeDestinationDirectory</YourDestinationDirectory>
<YourSourceDirectory>../SomeSourceDirectory</YourSourceDirectory>
</PropertyGroup>
<Target Name="BeforeBuild">
<CreateItem Include="$(YourSourceDirectory)/**/*.*">
<Output TaskParameter="Include" ItemName="YourFilesToCopy" />
</CreateItem>
<Copy SourceFiles="@(YourFilesToCopy)"
DestinationFiles="@(YourFilesToCopy->''$(YourDestinationDirectory)/%(RecursiveDir)%(Filename)%(Extension)'')" />
</Target>
</Project>
Esta es la tarea de copia que utilicé en mi propio proyecto, funcionó perfectamente para mí que copia la carpeta con subcarpetas al destino correctamente:
<ItemGroup >
<MyProjectSource Include="$(OutputRoot)/MySource/**/*.*" />
</ItemGroup>
<Target Name="AfterCopy" AfterTargets="WebPublish">
<Copy SourceFiles="@(MyProjectSource)"
OverwriteReadOnlyFiles="true" DestinationFolder="$(PublishFolder)api/% (RecursiveDir)"/>
En mi caso, copié la carpeta de publicación de un proyecto a otra carpeta de destino, creo que es similar a su caso.
Estaba buscando ayuda en esto también. Me tomó un tiempo, pero esto es lo que hice que funcionó muy bien.
<Target Name="AfterBuild">
<ItemGroup>
<ANTLR Include="../Data/antlrcs/**/*.*" />
</ItemGroup>
<Copy SourceFiles="@(ANTLR)" DestinationFolder="$(TargetDir)/%(RecursiveDir)" SkipUnchangedFiles="true" />
</Target>
Esto recursivamente copió el contenido de la carpeta llamada antlrcs
al $(TargetDir)
.
Este es el ejemplo que funcionó:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MySourceFiles Include="c:/MySourceTree/**/*.*"/>
</ItemGroup>
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFiles="@(MySourceFiles->''c:/MyDestinationTree/%(RecursiveDir)%(Filename)%(Extension)'')"
/>
</Target>
</Project>
fuente: https://msdn.microsoft.com/en-us/library/3e54c37h.aspx
Personalmente, he utilizado CopyFolder, que es parte de la Biblioteca de tareas de SDC.
Soy un poco nuevo en MSBuild, pero la tarea EXEC me parece útil para situaciones como estas. Encontré 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.
<Target Name="CopyToDeployFolder" DependsOnTargets="CompileWebSite">
<Exec Command="xcopy.exe $(OutputDirectory) $(DeploymentDirectory) /e" WorkingDirectory="C:/Windows/" />
</Target>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<YourDestinationDirectory>../SomeDestinationDirectory</YourDestinationDirectory>
<YourSourceDirectory>../SomeSourceDirectory</YourSourceDirectory>
</PropertyGroup>
<Target Name="BeforeBuild">
<CreateItem Include="$(YourSourceDirectory)/**/*.*">
<Output TaskParameter="Include" ItemName="YourFilesToCopy" />
</CreateItem>
<Copy SourceFiles="@(YourFilesToCopy)"
DestinationFiles="$(YourFilesToCopy)/%(RecursiveDir)" />
</Target>
</Project>
/**/*.*
ayuda para obtener archivos de toda la carpeta. RecursiveDir ayuda a poner todo el archivo en la carpeta respectiva ...