tarefa Delete
Exclui os arquivos especificados.
Parâmetros
A tabela a seguir descreve os parâmetros da tarefa Delete
.
Parâmetro | Descrição |
---|---|
DeletedFiles |
Parâmetro de saída ITaskItem[] opcional.Especifica os arquivos que foram excluídos com êxito. |
Files |
Parâmetro ITaskItem[] obrigatório.Especifica os arquivos a serem excluídos. |
TreatErrorsAsWarnings |
Parâmetro opcional Boolean Se true , os erros são registrados como avisos. O valor padrão é false . |
Comentários
Além dos parâmetros listados acima, essa tarefa herda parâmetros da classe TaskExtension, que herda da classe Task. Para obter uma lista desses parâmetros adicionais e suas descrições, confira Classe base TaskExtension.
Aviso
Tenha cuidado ao usar curingas com a tarefa Delete
. Você poderá excluir facilmente os arquivos errados com expressões como $(SomeProperty)\**\*.*
ou $(SomeProperty)/**/*.*
, especialmente se a propriedade for avaliada como uma cadeia de caracteres vazia. Nesse caso, o parâmetro Files
poderá ser avaliado como a raiz da unidade e excluir muito mais do que você deseja.
Exemplos
O exemplo a seguir exclui o arquivo ConsoleApp1.pdb quando você cria o destino DeleteDebugSymbolFile
.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<AppName>ConsoleApp1</AppName>
</PropertyGroup>
<Target Name="DeleteDebugSymbolFile">
<Message Text="Deleting $(OutDir)$(AppName).pdb"/>
<Delete Files="$(OutDir)$(AppName).pdb" />
</Target>
</Project>
Se você precisar acompanhar os arquivos excluídos, defina TaskParameter
como DeletedFiles
com o nome do item, da seguinte maneira:
<Target Name="DeleteDebugSymbolFile">
<Delete Files="$(OutDir)$(AppName).pdb" >
<Output TaskParameter="DeletedFiles" ItemName="DeletedList"/>
</Delete>
<Message Text="Deleted files: '@(DeletedList)'"/>
</Target>
Em vez de usar caracteres curinga diretamente na tarefa Delete
, crie um ItemGroup
de arquivos para excluir e executar a tarefa Delete
nele. Adicione o ItemGroup
com cuidado. Se você adicionar um ItemGroup
no nível superior em um arquivo de projeto, ele será avaliado no início, antes do início do build, para que não inclua nenhum arquivo que tenha sido criado como parte do processo de build. Portanto, coloque o ItemGroup
que cria a lista de itens a serem excluídos em um destino próximo à tarefa Delete
. Você também pode especificar uma condição para verificar se a propriedade não está vazia, para não criar uma lista de itens com um caminho que começa na raiz da unidade.
No exemplo a seguir, todos os arquivos com a extensão .orig
em uma pasta específica são excluídos.
<Project>
<Target Name="DeleteFiles" AfterTargets="Build">
<ItemGroup>
<FilesToDelete Include="source\*.orig"/>
</ItemGroup>
<Message Text="Deleting Files @(FilesToDelete)"/>
<Delete Files="@(FilesToDelete)">
<Output
TaskParameter="DeletedFiles"
ItemName="FilesDeleted"/>
</Delete>
<Message Text="Files deleted: @(FilesDeleted)"/>
</Target>
</Project>
Observação
Ao usar curingas para exclusão de arquivos gerados durante o processo de build, lembre-se de quando, no processo de build, ocorrerá a expansão curinga. No exemplo anterior, o ItemGroup
com a expansão curinga está no mesmo destino que a exclusão, o que garante que qualquer arquivo criado antes desse destino seja incluído na lista de exclusão. Os grupos de itens no nível superior são expandidos no momento da avaliação, o que perderia todos os arquivos gerados posteriormente no processo de build.
A tarefa Delete
destina-se à exclusão de arquivos. Se você quiser excluir um diretório, use RemoveDir.
A tarefa Delete
não fornece uma opção para excluir arquivos somente leitura. Para excluir arquivos somente leitura, você poderá usar a tarefa Exec
para executar o comando del
ou equivalente, com a opção apropriada para habilitar a exclusão de arquivos somente leitura. Você precisa prestar atenção ao comprimento da lista de itens de entrada, uma vez que há uma limitação de comprimento na linha de comando, além de garantir a manipulação de nomes de arquivo com espaços, como neste exemplo:
<Target Name="DeleteReadOnly">
<ItemGroup>
<FileToDelete Include="read only file.txt"/>
</ItemGroup>
<Exec Command="del /F /Q "@(FileToDelete)""/>
</Target>
Em geral, ao escrever scripts de build, considere se a exclusão faz parte logicamente de uma operação Clean
. Se você precisar definir alguns arquivos para serem limpos como parte de uma operação Clean
normal, poderá adicioná-los à lista @(FileWrites)
e eles serão excluídos no próximo Clean
. Se for necessário mais processamento personalizado, defina um destino e especifique para que ele seja executado definindo o atributo BeforeTargets="Clean"
ou AfterTargets="Clean"
ou defina sua versão personalizada dos destinos BeforeClean
ou AfterClean
. Confira Personalizar seu build.