Hedef derleme sırası
Bir hedefe giriş başka bir hedefin çıkışına bağlıysa hedefler sıralanmalıdır. Hedeflerin çalıştırıldığı sırayı belirtmek için şu öznitelikleri kullanabilirsiniz:
InitialTargets
. BuProject
öznitelik, hedefler komut satırında veyaDefaultTargets
özniteliğinde belirtiliyor olsa bile önce çalışacak hedefleri belirtir.DefaultTargets
. BuProject
öznitelik, bir hedef komut satırında açıkça belirtilmezse çalıştırılacak hedefleri belirtir.DependsOnTargets
. BuTarget
öznitelik, bu hedefin çalışabilmesi için çalıştırılması gereken hedefleri belirtir.BeforeTargets
veAfterTargets
. BuTarget
öznitelikler, bu hedefin belirtilen hedeflerden önce veya sonra çalıştırılması gerektiğini belirtir.
Genel olarak, diğer görevlerde hangi görevlerin çalıştırılacağını belirtmek için bildirim sırasına bağımlı olmamanız gerekir.
Derlemedeki sonraki bir hedef buna bağlı olsa bile, bir hedef derleme sırasında asla iki kez çalıştırılır. Bir hedef çalıştırıldıktan sonra derlemeye katkısı tamamlanır.
Hedeflerin bir Condition
özniteliği olabilir. Belirtilen koşul olarak değerlendirilirse false
, hedef yürütülemez ve derleme üzerinde hiçbir etkisi yoktur. Koşullar hakkında daha fazla bilgi için bkz . Koşullar.
İlk hedefler
InitialTargets
Project öğesinin özniteliği, komut satırında veya DefaultTargets
özniteliğinde hedefler belirtiliyor olsa bile önce çalışacak hedefleri belirtir. İlk hedefler genellikle hata denetimi için kullanılır.
özniteliğinin InitialTargets
değeri, hedeflerin noktalı virgülle ayrılmış, sıralı bir listesi olabilir. Aşağıdaki örnek, hedefin Warm
ve ardından hedefin çalıştırıldığını Eject
belirtir.
<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
İçeri aktarılan projelerin kendi InitialTargets
öznitelikleri olabilir. Tüm ilk hedefler birlikte toplanır ve sırayla çalıştırılır.
Daha fazla bilgi için bkz . Nasıl yapılır: Önce hangi hedefin derleneceğini belirtme.
Varsayılan hedefler
DefaultTargets
Project öğesinin özniteliği, bir hedef bir komut satırında açıkça belirtilmezse hangi hedefin veya hedeflerin derlenmiş olduğunu belirtir.
özniteliğinin DefaultTargets
değeri, varsayılan hedeflerin noktalı virgülle ayrılmış, sıralı bir listesi olabilir. Aşağıdaki örnek, hedefin Clean
ve ardından hedefin çalıştırıldığını Build
belirtir.
<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Komut satırındaki -target anahtarını kullanarak varsayılan hedefleri geçersiz kılabilirsiniz. Aşağıdaki örnek, hedefin Build
ve ardından hedefin çalıştırıldığını Report
belirtir. Hedefleri bu şekilde belirttiğinizde, varsayılan hedefler yoksayılır.
msbuild -target:Build;Report
Hem ilk hedefler hem de varsayılan hedefler belirtilirse ve herhangi bir komut satırı hedefi belirtilmezse, MSBuild ilk hedefleri önce çalıştırır ve ardından varsayılan hedefleri çalıştırır.
İçeri aktarılan projelerin kendi DefaultTargets
öznitelikleri olabilir. Karşılaşılan ilk DefaultTargets
öznitelik, hangi varsayılan hedeflerin çalıştırılacağını belirler.
Daha fazla bilgi için bkz . Nasıl yapılır: Önce hangi hedefin derleneceğini belirtme.
İlk hedef
İlk hedefler, varsayılan hedefler veya komut satırı hedefleri yoksa, MSBuild proje dosyasında veya içeri aktarılan proje dosyalarında karşılaştığı ilk hedefi çalıştırır.
Hedef bağımlılıklar
Hedefler birbiriyle bağımlılık ilişkilerini açıklayabilir. DependsOnTargets
özniteliği, hedefin diğer hedeflere bağlı olduğunu gösterir. Örneğin,
<Target Name="Serve" DependsOnTargets="Chop;Cook" />
MSBuild'e hedefin Serve
hedefe ve Cook
hedefe bağlı Chop
olduğunu bildirir. MSBuild hedefi çalıştırır Chop
ve ardından hedefi çalıştırmadan Cook
Serve
önce çalıştırır.
Not
SDK'daki standart hedefler, bu hedef için bağımlılıklar (örneğin, $(BuildDependsOn)
, $(CleanDependsOn)
vb.) olan hedeflerin listesini içeren bir dizi DependsOn
özellik tanımlar. Örneğin,
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
Bir projeyi özelleştirmek için, Visual Studio derleme işlemini genişletme bölümünde açıklandığı gibi, derleme işlemini genişleten ek özel hedeflerle özellikleri geçersiz kılabilirsinizDependsOn
.
BeforeTargets ve AfterTargets
ve AfterTargets
özniteliklerini kullanarak BeforeTargets
hedef sırasını belirtebilirsiniz.
Aşağıdaki betiği göz önünde bulundurun.
<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>
Hedef sonrasında Compile
ama hedef öncesinde Link
çalışan bir ara hedef Optimize
oluşturmak için, öğesinde Project
herhangi bir yere aşağıdaki hedefi ekleyin.
<Target Name="Optimize" AfterTargets="Compile">
<Message Text="Optimizing" />
</Target>
Alternatif olarak, siparişi şu şekilde belirtin:
<Target Name="Optimize" BeforeTargets="Link">
<Message Text="Optimizing" />
</Target>
Hem hem de BeforeTargets
AfterTargets
aynı hedefte belirtmek yararlı değildir. Sonraki bölümde açıklandığı gibi, yalnızca karşılaşılan ilk hedef yeni hedefin çalışmasına neden olur.
Hedef derleme sırasını belirleme
MSBuild, hedef derleme sırasını aşağıdaki gibi belirler:
InitialTargets
hedefler çalıştırılır.-target anahtarı tarafından komut satırında belirtilen hedefler çalıştırılır. Komut satırında hedef belirtmezseniz hedefler
DefaultTargets
çalıştırılır. Hiçbiri yoksa, karşılaşılan ilk hedef çalıştırılır.Hedefin
Condition
özniteliği değerlendirilir.Condition
Özniteliği varsa ve olarak değerlendirilirsefalse
hedef yürütülemez ve derleme üzerinde başka bir etkisi yoktur.Koşullu hedefi belirtilen sırada listeleyen veya
AfterTargets
yine de yürüten diğer hedeflerBeforeTargets
.Hedef yürütülmeden veya atlanmadan önce,
DependsOnTargets
öznitelik hedefe uygulanmadığı ve olarak değerlendirilmediğifalse
süreceCondition
hedefleri çalıştırılır.Not
Çıkış öğeleri güncel olduğundan yürütülmezse hedef atlanmış olarak kabul edilir (bkz . artımlı derleme). Bu denetim, hedef içindeki görevler yürütülmeden hemen önce yapılır ve hedeflerin yürütülme sırasını etkilemez.
Hedef yürütülmeden veya atlanmadan önce, bir öznitelikte
BeforeTargets
hedefi listeleyen diğer tüm hedefler çalıştırılır.Hedef yürütülmeden
Inputs
önce özniteliği veOutputs
özniteliği karşılaştırılır. MSBuild, ilgili giriş dosyası veya dosyalarıyla ilgili olarak tüm çıkış dosyalarının güncel olmadığını belirlerse, MSBuild hedefi yürütür. Aksi takdirde, MSBuild hedefi atlar.Hedef yürütüldükten veya atlandıktan sonra, bir öznitelikte
AfterTargets
listeleyen diğer tüm hedefler çalıştırılır.