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 iniProject
menentukan target yang akan berjalan terlebih dahulu, bahkan jika target ditentukan pada baris perintah atau diDefaultTargets
atribut.DefaultTargets
. Atribut iniProject
menentukan target mana yang dijalankan jika target tidak ditentukan secara eksplisit pada baris perintah.DependsOnTargets
. Atribut iniTarget
menentukan target yang harus berjalan sebelum target ini dapat berjalan.BeforeTargets
danAfterTargets
. Atribut iniTarget
menentukan bahwa target ini harus berjalan sebelum atau sesudah target yang ditentukan.
Secara umum, Anda tidak boleh bergantung pada urutan deklarasi untuk menentukan tugas apa yang dijalankan sebelum tugas lain.
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 Warm
berjalan, lalu target Eject
berjalan.
<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 Clean
berjalan, lalu target Build
berjalan.
<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 Build
berjalan, lalu target Report
berjalan. 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 Serve
tergantung pada target Chop
dan target Cook
. MSBuild menjalankan target Chop
, lalu menjalankan target Cook
sebelum menjalankan targetServe
.
Catatan
Target standar dalam SDK menentukan sejumlah DependsOn
properti yang berisi daftar target yang merupakan dependensi untuk target tersebut (misalnya, $(BuildDependsOn)
, $(CleanDependsOn)
, dan sebagainya). Contohnya,
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
Untuk menyesuaikan proyek, Anda dapat mengambil DependsOn
alih properti dengan target kustom tambahan yang memperluas proses build, seperti yang dijelaskan dalam Memperluas proses build Visual Studio.
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 Optimize
yang 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 dan BeforeTargets
AfterTargets
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:
InitialTargets
target dijalankan.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.Atribut
Condition
target dievaluasi. Jika atributCondition
ada dan mengevaluasi kefalse
, target tidak dijalankan dan tidak berpengaruh lebih lanjut pada build.Target lain yang mencantumkan target kondisional dalam
BeforeTargets
atauAfterTargets
masih dijalankan dalam urutan yang ditentukan.Sebelum target dijalankan atau dilewati, targetnya
DependsOnTargets
dijalankan, kecualiCondition
atribut diterapkan ke target dan dievaluasi kefalse
.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.
Sebelum target dijalankan atau dilewati, target lain yang mencantumkan target dalam
BeforeTargets
atribut dijalankan.Sebelum target dijalankan, atribut
Inputs
dan atributnyaOutputs
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.Setelah target dijalankan atau dilewati, target lain yang mencantumkannya dalam atribut
AfterTargets
dijalankan.