Bagikan melalui


Menghapus tugas

Menghapus file yang ditentukan.

Parameter

Tabel berikut ini menjelaskan parameter tugas Delete.

Parameter Deskripsi
DeletedFiles Parameter output ITaskItem[] opsional.

Menentukan file yang berhasil dihapus.
Files Parameter ITaskItem[] wajib.

Menentukan file yang akan dihapus.
TreatErrorsAsWarnings Parameter Boolean opsional

Jika true, kesalahan dicatat sebagai peringatan. Nilai defaultnya adalah false.

Keterangan

Selain parameter yang tercantum di atas, tugas ini mewarisi parameter dari kelas TaskExtension, yang mewarisi sendiri dari kelas Task. Untuk daftar parameter tambahan ini dan deskripsinya, lihat kelas dasar TaskExtension.

Peringatan

Berhati-hatilah saat Anda menggunakan wildcard dengan tugas Delete. Anda dapat dengan mudah menghapus file yang salah dengan ekspresi seperti $(SomeProperty)\**\*.* atau $(SomeProperty)/**/*.*, terutama jika properti mengevaluasi ke string kosong, dalam hal ini parameter Files dapat mengevaluasi ke akar drive dan menghapus jauh lebih banyak daripada yang ingin Anda hapus.

Contoh

Contoh berikut menghapus file ConsoleApp1.pdb saat Anda membangun target 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>

Jika Anda perlu melacak file yang dihapus, atur TaskParameter ke DeletedFiles dengan nama item, sebagai berikut:

      <Target Name="DeleteDebugSymbolFile">
        <Delete Files="$(OutDir)$(AppName).pdb" >
              <Output TaskParameter="DeletedFiles" ItemName="DeletedList"/>
        </Delete>
        <Message Text="Deleted files: '@(DeletedList)'"/>
    </Target>

Alih-alih langsung menggunakan wildcard dalam tugas Delete, buat ItemGroup dari file untuk menghapus dan menjalankan tugas Delete pada tugas tersebut. Tapi, pastikan untuk menempatkan ItemGroup dengan hati-hati. Jika Anda menempatkan ItemGroup di tingkat atas dalam file proyek, itu akan dievaluasi lebih awal, sebelum build dimulai, sehingga tidak akan menyertakan file apa pun yang dibangun sebagai bagian dari proses build. Jadi, letakkan ItemGroup yang membuat daftar item untuk dihapus dalam target yang dekat dengan tugas Delete. Anda juga dapat menentukan kondisi untuk memeriksa jika properti tidak kosong, sehingga tidak akan membuat daftar item dengan jalur yang dimulai di akar drive.

Contoh berikut, semua file dengan ekstensi .orig dalam folder tertentu dihapus.

<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>

Catatan

Saat menggunakan kartubebas untuk penghapusan file yang dihasilkan selama proses build, ketahui kapan dalam proses build, ekspansi kartubebas terjadi. Dalam contoh sebelumnya, ItemGroup dengan ekspansi wildcard berada dalam target yang sama dengan penghapusan, yang memastikan bahwa file apa pun yang dibangun sebelum target tersebut disertakan dalam daftar penghapusan. Grup item di tingkat atas diperluas pada waktu evaluasi, yang akan melewatkan file apa pun yang dihasilkan nanti dalam proses build.

Tugas Delete ditujukan untuk menghapus file. Jika Anda ingin menghapus direktori, gunakan RemoveDir.

Tugas Delete tidak menyediakan opsi untuk menghapus file baca-saja. Untuk menghapus file baca-saja, Anda dapat menggunakan tugas Exec untuk menjalankan perintah del atau yang setara, dengan opsi yang sesuai untuk mengaktifkan penghapusan file baca-saja. Anda harus memperhatikan panjang daftar item input, karena ada batasan panjang pada baris perintah, serta memastikan bahwa nama file memiliki spasi, seperti dalam contoh ini:

<Target Name="DeleteReadOnly">
  <ItemGroup>
    <FileToDelete Include="read only file.txt"/>
  </ItemGroup>
  <Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/>
</Target>

Secara umum, saat menulis skrip build, pertimbangkan jika penghapusan secara logis merupakan bagian dari operasi Clean. Jika Anda perlu mengatur beberapa file untuk dibersihkan sebagai bagian dari operasi normal Clean, Anda dapat menambahkannya ke daftar @(FileWrites) dan file tersebut akan dihapus pada Clean berikutnya. Jika diperlukan lebih banyak pemrosesan kustom, tentukan target dan tentukan agar dapat dijalankan dengan mengatur atribut BeforeTargets="Clean" atau AfterTargets="Clean", atau tentukan versi kustom dari BeforeClean atau target AfterClean. Lihat Menkustomisasi build Anda.

Baca juga