Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
MSBuild artımlı derlemeleri, ilgili giriş dosyalarına göre up-to-date olan çıkış dosyalarına sahip hedeflerin yürütülmemesi için iyileştirilmiş derlemelerdir.
Hedef öğenin hem giriş olarak beklediği öğeleri gösteren bir Inputs özniteliği hem de çıkış olarak ürettiği öğeleri gösteren bir Outputs özniteliği olabilir. MSBuild, bu özniteliklerin değerleri arasında bire bir eşleme bulmaya çalışır. Böyle bir eşleme varsa, MSBuild her giriş öğesinin zaman damgasını ilgili çıkış öğesinin zaman damgasıyla karşılaştırır. Bire bir 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 up-to-date olarak kabul edilir.
Not
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 hedefin güncelliğini yitirmiyor.
Tüm çıkış öğeleri up-to-date ise, MSBuild hedefi atlar. Hedefin bu kademeli derlemesi, derleme hızını önemli ölçüde artırabilir. Yalnızca bazı dosyalar up-to-date ise, MSBuild hedefi yürütür ancak up-to-date öğelerini atlar ve bu nedenle tüm öğeleri -date up-togetirir. Bu işlem, kısmi artımlı derlemeolarak bilinir.
Bire bir eşlemeler yalnızca Outputs özniteliği Inputs özniteliğinin dönüşümü yapılarak oluşturulabilir. Daha fazla bilgi için bkz. MSBuild dönüşümleri.
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>
Compile öğe türüyle temsil edilen dosya kümesi bir yedekleme dizinine kopyalanır. Yedekleme dosyaları .bak dosya adı uzantısına sahiptir.
Compile öğe türüyle temsil edilen dosyalar veya karşılık gelen yedekleme dosyaları, Backup hedefi çalıştırıldıktan sonra silinmez veya değiştirilmezse, sonraki derlemelerde Backup hedefi atlanır.
Çıktıdan çıkarım
MSBuild, hedefin yürütülmesi gerekip gerekmediğini belirlemek için hedefin Inputs 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örevlerin oluşturduğu veya değiştirdiği özellikler ve öğeler derlemeyi etkileyebileceğinden, bunları etkileyen hedef atlanmış olsa bile MSBuild'in değerlerini çıkarması gerekir. Bu işlem, çıkış çıkarımıolarak bilinir.
Üç durum vardır:
Hedef, değeri
falseolan birConditionözniteliğine sahiptir. Bu durumda hedef çalıştırılamaz ve derleme üzerinde hiçbir etkisi yoktur.Hedefin güncel olmayan çıkışları vardır ve bunları up-togüncel hale getirmek için çalıştırılır.
Hedefte güncel olmayan çıkışlar yoktur, bu yüzden atlanır. MSBuild hedefi değerlendirir ve öğelerde ve özelliklerde, hedef çalışıyormuş gibi değişiklikler yapar.
Artımlı derlemeyi desteklemek için, görevler herhangi bir Output öğesinin TaskParameter öznitelik değerinin bir görev giriş parametresine eşit olduğundan emin olmalıdır. Örneğin:
<CreateProperty Value="123">
<Output PropertyName="Easy" TaskParameter="Value" />
</CreateProperty>
Bu kod, hedefin yürütülüp yürütülmediğine bakılmaksızın 123 değerine sahip 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örevleri 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üp yürütülmediğini belirlemek için hedefin özelliklerini ve öğelerini incelemeniz gerekir. Bunu yapmak için, hedefe CreateProperty görevini ekleyin ve Output öğesini ekleyin, bu öğenin TaskParameter'si ValueSetByTask'tür. Mesela:
<CreateProperty Value="true">
<Output TaskParameter="ValueSetByTask" PropertyName="CompileRan" />
</CreateProperty>
Bu kod özelliği CompileRan oluşturur ve yalnızca hedef yürütülürse truedeğerini verir. Hedef atlanırsa CompileRan oluşturulmaz.