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ğinefalse
sahiptir. 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 true
verir, ancak yalnızca hedef yürütülürse. Hedef atlanırsa, CompileRan oluşturulmaz.