Artımlı derlemeler

Artımlı derlemeler, ilgili giriş dosyalarıyla ilgili olarak güncel çıkış dosyalarına sahip hedeflerin yürütülmemesi için iyileştirilmiş derlemelerdir. Hedef öğenin hem giriş olarak beklediği öğeleri belirten bir Inputs özniteliği hem de çıkış olarak hangi öğeleri ürettiğini gösteren bir Outputs özniteliği olabilir. MSBuild, bu özniteliklerin değerleri arasında 1-1 eşlemesi bulmaya çalışır. 1-1 eşlemesi varsa, MSBuild her giriş öğesinin zaman damgasını ilgili çıkış öğesinin zaman damgasıyla karşılaştırır. 1-1 eşlemesi olmayan çıkış dosyaları tüm giriş dosyalarıyla karşılaştırılır. Çıkış dosyası giriş dosyası veya dosyalarından aynı yaş veya daha yeniyse, öğe güncel olarak kabul edilir.

Dekont

MSBuild giriş dosyalarını değerlendirdiğinde, yalnızca geçerli yürütmedeki listenin içeriği dikkate alınır. Son derlemedeki listede yapılan değişiklikler otomatik olarak hedefi güncel yapmaz.

Tüm çıkış öğeleri güncelse, MSBuild hedefi atlar. Hedefin bu artımlı derlemesi , derleme hızını önemli ölçüde artırabilir. Yalnızca bazı dosyalar güncelse, MSBuild hedefi yürütür ancak güncel öğeleri atlar ve böylece tüm öğeleri güncel hale getirir. Bu işlem kısmi artımlı derleme olarak bilinir.

1-1 eşlemeleri yalnızca özniteliğinin Outputs dönüşümü Inputs yapılarak oluşturulabilir. Daha fazla bilgi için bkz . Dönüşümler.

Aşağıdaki hedefi göz önünde bulundurun.

<Target Name="Backup" Inputs="@(Compile)"
    Outputs="@(Compile->'$(BackupFolder)%(Identity).bak')">
    <Copy SourceFiles="@(Compile)" DestinationFiles=
        "@(Compile->'$(BackupFolder)%(Identity).bak')" />
</Target>

Öğe türüyle Compile temsil edilen dosya kümesi bir yedekleme dizinine kopyalanır. Yedekleme dosyaları .bak dosya adı uzantısına sahiptir. Öğe türüyle Compile temsil edilen dosyalar veya buna karşılık gelen yedekleme dosyaları, Yedekleme hedefi çalıştırıldıktan sonra silinmez veya değiştirilmezse, yedekleme hedefi sonraki derlemelerde atlanır.

Çıkış çıkarımı

MSBuild, hedefin Inputs yürütülmesi gerekip gerekmediğini belirlemek için hedefin ve Outputs özniteliklerini karşılaştırır. İdeal olarak, artımlı derleme tamamlandıktan sonra var olan dosya kümesi, ilişkili hedefler yürütülse de yürütülmese de aynı kalmalıdır. Görevler tarafından oluşturulan veya değiştirilen özellikler ve öğeler derlemeyi etkileyebileceğinden, onları etkileyen hedef atlanmış olsa bile MSBuild'in değerlerini çıkarması gerekir. Bu işlem çıkış çıkarımı olarak bilinir.

Üç durum vardır:

  • Hedef, olarak değerlendirilen bir Condition özniteliğine falsesahiptir. Bu durumda hedef çalıştırılmaz ve derleme üzerinde hiçbir etkisi yoktur.

  • Hedefin güncel olmayan çıkışları vardır ve bunları güncel olarak getirmek için çalıştırılır.

  • Hedefte güncel olmayan çıkışlar yoktur ve atlanır. MSBuild hedefi değerlendirir ve hedef çalıştırılmış gibi öğelerde ve özelliklerde değişiklikler yapar.

Artımlı derlemeyi desteklemek için, görevler herhangi bir Output öğenin öznitelik değerinin bir görev giriş parametresine eşit olduğundan emin TaskParameter olmalıdır. İşte bazı örnekler:

<CreateProperty Value="123">
    <Output PropertyName="Easy" TaskParameter="Value" />
</CreateProperty>

Bu kod, hedefin yürütülmesi veya atlanıp atlanmamasından bağımsız olarak "123" değerine sahip Olan Easy özelliğini oluşturur.

MSBuild 3.5'den başlayarak, çıkış çıkarımı hedefteki öğe ve özellik gruplarında otomatik olarak gerçekleştirilir. CreateItem görevler bir hedefte gerekli değildir ve bundan kaçınılmalıdır. Ayrıca, CreateProperty görevler yalnızca bir hedefin yürütülp yürütülmediğini belirlemek için bir hedefte kullanılmalıdır.

MSBuild 3.5'den önce CreateItem görevini kullanabilirsiniz.

Hedefin çalıştırılıp çalıştırılmadığını belirleme

Çıkış çıkarımı nedeniyle, hedefin yürütüldüğünü belirleyebilmek için özellikleri ve öğeleri incelemek için hedefe bir görev eklemeniz CreateProperty gerekir. CreateProperty Görevi hedefe ekleyin ve "ValueSetByTask" olan TaskParameter bir Output öğe verin.

<CreateProperty Value="true">
    <Output TaskParameter="ValueSetByTask" PropertyName="CompileRan" />
</CreateProperty>

Bu kod, CompileRan özelliğini oluşturur ve değerini trueverir, ancak yalnızca hedef yürütülürse. Hedef atlanırsa, CompileRan oluşturulmaz.