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 opsionalJika 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 "@(FileToDelete)""/>
</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.