Urutan build target

Target harus diurutkan jika input ke satu target tergantung pada output dari target lain. Anda dapat menggunakan atribut ini untuk menentukan urutan target yang dijalankan:

  • InitialTargets. Atribut ini Project menentukan target yang akan berjalan terlebih dahulu, bahkan jika target ditentukan pada baris perintah atau di DefaultTargets atribut.

  • DefaultTargets. Atribut ini Project menentukan target mana yang dijalankan jika target tidak ditentukan secara eksplisit pada baris perintah.

  • DependsOnTargets. Atribut ini Target menentukan target yang harus berjalan sebelum target ini dapat berjalan.

  • BeforeTargets dan AfterTargets. Atribut ini Target menentukan bahwa target ini harus berjalan sebelum atau sesudah target yang ditentukan.

Target tidak pernah dijalankan dua kali selama build, bahkan jika target berikutnya dalam build bergantung padanya. Setelah target dijalankan, kontribusinya terhadap build selesai.

Target dapat memiliki Condition atribut. Jika kondisi yang ditentukan mengevaluasi ke false, target tidak dijalankan dan tidak berpengaruh pada build. Untuk informasi selengkapnya tentang kondisi, lihat Kondisi.

Target awal

Atribut InitialTargets elemen Proyek menentukan target yang akan berjalan terlebih dahulu, bahkan jika target ditentukan pada baris perintah atau di DefaultTargets atribut. Target awal biasanya digunakan untuk pemeriksaan kesalahan.

Nilai InitialTargets atribut dapat berupa daftar target yang dibatasi titik koma dan diurutkan. Contoh berikut menentukan bahwa target Warmberjalan, lalu target Ejectberjalan.

<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Proyek yang diimpor dapat memiliki atributnya sendiri InitialTargets . Semua target awal dikumpulkan bersama dan dijalankan secara berurutan.

Untuk informasi selengkapnya, lihat Cara: Menentukan target mana yang akan dibangun terlebih dahulu.

Target default

Atribut DefaultTargets elemen Proyek menentukan target mana yang dibangun jika target tidak ditentukan secara eksplisit dalam baris perintah.

Nilai DefaultTargets atribut dapat berupa daftar target default yang dibatasi titik koma dan diurutkan. Contoh berikut menentukan bahwa target Cleanberjalan, lalu target Buildberjalan.

<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Anda dapat mengambil alih target default dengan menggunakan tombol -target pada baris perintah. Contoh berikut menentukan bahwa target Buildberjalan, lalu target Reportberjalan. Saat Anda menentukan target dengan cara ini, target default apa pun diabaikan.

msbuild -target:Build;Report

Jika target awal dan target default ditentukan, dan jika tidak ada target baris perintah yang ditentukan, MSBuild menjalankan target awal terlebih dahulu, lalu menjalankan target default.

Proyek yang diimpor dapat memiliki atributnya sendiri DefaultTargets . Atribut pertama DefaultTargets yang ditemui menentukan target default mana yang akan berjalan.

Untuk informasi selengkapnya, lihat Cara: Menentukan target mana yang akan dibangun terlebih dahulu.

Target pertama

Jika tidak ada target awal, target default, atau target baris perintah, maka MSBuild menjalankan target pertama yang ditemuinya dalam file proyek atau file proyek yang diimpor.

Dependensi target

Target dapat menggambarkan hubungan dependensi satu sama lain. Atribut DependsOnTargets menunjukkan bahwa target bergantung pada target lain. Contohnya,

<Target Name="Serve" DependsOnTargets="Chop;Cook" />

memberi tahu MSBuild bahwa target Servetergantung pada target Chopdan target Cook. MSBuild menjalankan target Chop, lalu menjalankan target Cooksebelum menjalankan targetServe.

BeforeTargets dan AfterTargets

Anda dapat menentukan urutan target dengan menggunakan BeforeTargets atribut dan AfterTargets .

Pertimbangkan skrip berikut.

<Project DefaultTargets="Compile;Link" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Compile">
        <Message Text="Compiling" />
    </Target>
    <Target Name="Link">
        <Message Text="Linking" />
    </Target>
</Project>

Untuk membuat target perantara Optimizeyang berjalan setelah targetCompile, tetapi sebelum targetLink, tambahkan target berikut di mana saja dalam elemen Project.

<Target Name="Optimize" AfterTargets="Compile">
    <Message Text="Optimizing" />
</Target>

Sebagai alternatif, tentukan urutannya sebagai

<Target Name="Optimize" BeforeTargets="Link">
    <Message Text="Optimizing" />
</Target>

Tidak berguna untuk menentukan danBeforeTargetsAfterTargets pada target yang sama. Seperti yang dijelaskan di bagian selanjutnya, hanya target pertama yang ditemukan yang akan menyebabkan target baru dijalankan.

Menentukan urutan build target

MSBuild menentukan urutan build target sebagai berikut:

  1. InitialTargets target dijalankan.

  2. Target yang ditentukan pada baris perintah oleh tombol -target dijalankan. Jika Anda tidak menentukan target pada baris perintah, maka target DefaultTargets akan dijalankan. Jika tidak ada, maka target pertama yang ditemui yang dijalankan.

  3. Atribut Condition target dievaluasi. Jika atribut Conditionada dan mengevaluasi ke false, target tidak dijalankan dan tidak berpengaruh lebih lanjut pada build.

    Target lain yang mencantumkan target kondisional dalam BeforeTargets atau AfterTargets masih dijalankan dalam urutan yang ditentukan.

  4. Sebelum target dijalankan atau dilewati, targetnya DependsOnTargets dijalankan, kecuali Condition atribut diterapkan ke target dan dievaluasi ke false.

    Catatan

    Target dianggap dilewati jika tidak dijalankan karena item outputnya sudah diperbarui (lihat build bertahap). Pemeriksaan ini dilakukan tepat sebelum menjalankan tugas di dalam target, dan tidak memengaruhi urutan eksekusi target.

  5. Sebelum target dijalankan atau dilewati, target lain yang mencantumkan target dalam BeforeTargets atribut dijalankan.

  6. Sebelum target dijalankan, atribut Inputsdan atributnya Outputs dibandingkan. Jika MSBuild menentukan bahwa file output apa pun sudah kadaluarsa sehubungan dengan file atau file input yang sesuai, maka MSBuild menjalankan target. Jika tidak, MSBuild melewati target.

  7. Setelah target dijalankan atau dilewati, target lain yang mencantumkannya dalam atribut AfterTargets dijalankan.