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 &quot;@(FileToDelete)&quot;"/>
</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.

Confira também