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. Bu Project öznitelik, hedefler komut satırında veya DefaultTargets özniteliğinde belirtiliyor olsa bile önce çalışacak hedefleri belirtir.

  • DefaultTargets. Bu Project öznitelik, bir hedef komut satırında açıkça belirtilmezse çalıştırılacak hedefleri belirtir.

  • DependsOnTargets. Bu Target öznitelik, bu hedefin çalışabilmesi için çalıştırılması gereken hedefleri belirtir.

  • BeforeTargets ve AfterTargets. Bu Target öznitelikler, bu hedefin belirtilen hedeflerden önce veya sonra çalıştırılması gerektiğini belirtir.

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 CookServe önce çalıştırır.

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

  1. InitialTargets hedefler çalıştırılır.

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

  3. Hedefin Condition özniteliği değerlendirilir. Condition Özniteliği varsa ve olarak değerlendirilirse falsehedef 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.

  4. Hedef yürütülmeden veya atlanmadan önce, DependsOnTargets öznitelik hedefe uygulanmadığı ve olarak değerlendirilmediği falsesürece Condition hedefleri çalıştırılır.

    Dekont

    Çı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.

  5. Hedef yürütülmeden veya atlanmadan önce, bir öznitelikte BeforeTargets hedefi listeleyen diğer tüm hedefler çalıştırılır.

  6. Hedef yürütülmeden Inputs önce özniteliği ve Outputs ö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.

  7. Hedef yürütüldükten veya atlandıktan sonra, bir öznitelikte AfterTargets listeleyen diğer tüm hedefler çalıştırılır.