msbuild - terminen - no se ha declarado el elemento packages
Cómo borrar todos los archivos y carpetas con msbuild (4)
¿Cómo puedo eliminar todos los archivos y carpetas de una ruta determinada?
Intenté esto, pero no puedo seleccionar los directorios.
<Target Name="CleanSource" Condition="$(path)!=''''">
<Message Text="path=$(path)"/>
<ItemGroup>
<fileToDelete Include="$(path)/**/*.*" />
<directoryToDelete Include="$(path)/**/" /><!these doest not select any directory at all-->
</ItemGroup>
<Message Text="file to delete:@(fileToDelete)"/>
<Message Text="directory to delete:@(directoryToDelete)"/>
<Delete Files="@(fileToDelete)" />
<Message Text="file effectively deleted:@(DeletedFiles)"/>
<RemoveDir Directories="@(directoryToDelete)" />
<Message Text="Directory effectively deleted:@(RemovedDirectories)"/>
</Target>
Estoy llegando a esta conversación un poco tarde, pero encontré que la forma más fácil de lograr esto era usar la tarea Exec
para ejecutar el comando por lotes dado por lain en respuesta a una pregunta similar (con ediciones menores por parte de usted):
<Exec Command="FOR /D %%p IN ("$(path)*.*") DO rmdir "%%p" /s /q" />
Finalmente usé PowerShell, que es mucho más rápido:
<exec>
<executable>powershell.exe</executable>
<buildArgs><![CDATA[-command "& {if( [System.IO.Directory]::Exists($pwd) ){dir $pwd | ri -recurse
-force}}"]]></buildArgs>
</exec>
La tarea RemoveDir elimina los directorios especificados y todos sus archivos y subdirectorios. No es necesario eliminar primero los archivos y subdirectorios. Simplemente pase el nombre del directorio a RemoveDir.
<ItemGroup>
<DirsToClean Include="work" />
</ItemGroup>
<Target Name="CleanWork">
<RemoveDir Directories="@(DirsToClean)" />
</Target>
Si bien hay maneras de construir esto usando solo MSBuild, recomiendo altamente el paquete de extensión de MSBuild.
http://msbuildextensionpack.codeplex.com/ [se ha movido]
GitHub: MSBuildExtensionPack
Al utilizar el paquete, obtiene una tarea RemoveContent que hace exactamente lo que necesita. Una vez que instales, simplemente harás algo como:
<MSBuild.ExtensionPack.FileSystem.Folder
TaskAction="RemoveContent" Path="$(PathtoEmpty)"/>