Artımlı olarak derleme
Büyük bir proje oluşturduğunuzda, daha önce oluşturulmuş ve hala güncel olan bileşenlerin yeniden oluşturulmaması önemlidir. Tüm hedefler her seferinde oluşturulursa, her derlemenin tamamlanması uzun sürer. Artımlı derlemeleri etkinleştirmek için (yalnızca daha önce oluşturulmamış olan hedeflerin veya güncel olmayan hedeflerin yeniden derlendiği derlemeler), Microsoft Build Engine (MSBuild), giriş dosyalarının zaman damgalarını çıkış dosyalarının zaman damgalarıyla karşılaştırabilir ve hedefi atlayıp atlayıp oluşturmayacağını veya kısmen yeniden oluşturup oluşturmayacağını belirleyebilir. Ancak, girişler ve çıkışlar arasında bire bir eşleme olması gerekir. Bu doğrudan eşlemeyi tanımlamak üzere hedefleri etkinleştirmek için dönüşümleri kullanabilirsiniz. Dönüşümler hakkında daha fazla bilgi için bkz . Dönüşümler.
Girişleri ve çıkışları belirtme
Girişler ve çıkışlar proje dosyasında belirtilirse hedef artımlı olarak oluşturulabilir.
Hedefin girişlerini ve çıkışlarını belirtmek için
öğesinin
Inputs
veOutputs
öznitelikleriniTarget
kullanın. Örneğin:<Target Name="Build" Inputs="@(CSFile)" Outputs="hello.exe">
MSBuild, giriş dosyalarının zaman damgalarını çıkış dosyalarının zaman damgalarıyla karşılaştırabilir ve hedefi atlayıp atlamayacağını, oluşturup oluşturmayacağını veya kısmen yeniden oluşturup oluşturmayacağını belirleyebilir. Aşağıdaki örnekte, öğe listesindeki herhangi bir dosya hello.exe dosyasından @(CSFile)
daha yeniyse MSBuild hedefi çalıştırır; aksi takdirde atlanır:
<Target Name="Build"
Inputs="@(CSFile)"
Outputs="hello.exe">
<Csc
Sources="@(CSFile)"
OutputAssembly="hello.exe"/>
</Target>
Bir hedefte girişler ve çıkışlar belirtildiğinde, her çıkış yalnızca bir girişle eşlenebilir veya çıkışlarla girişler arasında doğrudan eşleme olamaz. Önceki Csc görevinde, örneğin, hello.exe çıktısı tek bir girişle eşlenemez; bunların tümüne bağlıdır.
Dekont
Girişler ve çıkışlar arasında doğrudan eşleme olmayan bir hedef, her zaman her çıkışın yalnızca bir girişle eşlendiği bir hedeften daha sık oluşturulur çünkü MSBuild, bazı girişler değiştiğinde hangi çıkışların yeniden oluşturulması gerektiğini belirleyemez.
Lc görevi gibi çıkışlar ve girişler arasında doğrudan eşleme belirleyebileceğiniz görevler, bir dizi girişten bir çıkış derlemesi üreten Csc ve Vbc gibi görevlerin aksine artımlı derlemeler için en uygundur.
Örnek
Aşağıdaki örnek, varsayımsal bir Yardım sistemi için Yardım dosyaları oluşturan bir proje kullanır. Proje, kaynak .txt dosyalarını ara .content dosyalarına dönüştürerek çalışır ve bu dosyalar XML meta veri dosyalarıyla birleştirilerek Yardım sistemi tarafından kullanılan son .help dosyasını oluşturur. Proje aşağıdaki varsayımsal görevleri kullanır:
GenerateContentFiles
: .txt dosyalarını .content dosyalarına dönüştürür.BuildHelp
: Son .help dosyasını oluşturmak için .content dosyalarını ve XML meta veri dosyalarını birleştirir.
Proje, görevdeki GenerateContentFiles
girişler ve çıkışlar arasında bire bir eşleme oluşturmak için dönüşümleri kullanır. Daha fazla bilgi için bkz . Dönüşümler. Ayrıca öğesi, Output
görevdeki GenerateContentFiles
çıkışları görevin girişleri BuildHelp
olarak otomatik olarak kullanacak şekilde ayarlanır.
Bu proje dosyası hem Convert
ve Build
hedeflerini içerir. GenerateContentFiles
ve BuildHelp
görevleri, her hedefin Convert
artımlı olarak oluşturulabilmesi için sırasıyla ve Build
hedeflerine yerleştirilir. öğesi kullanılarakOutput
, görevin çıkışlarıGenerateContentFiles
, görev için BuildHelp
giriş olarak kullanabilecekleri öğe listesine yerleştirilirContentFile
. Output
öğesini bu şekilde kullanmak, bir görevin çıkışlarını otomatik olarak başka bir görevin girdileri olarak sağlar, böylece her görevde tek tek öğeleri veya öğe listelerini el ile listelemeniz gerekmez.
Dekont
Hedef artımlı olarak derlenebilir, ancak Convert
hedeften gelen tüm çıkışlar her zaman hedef için Build
giriş olarak gereklidir. MSBuild, öğesini kullandığınızda Output
bir hedeften gelen tüm çıkışları otomatik olarak başka bir hedef için giriş olarak sağlar.
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<ItemGroup>
<TXTFile Include="*.txt"/>
<XMLFiles Include="\metadata\*.xml"/>
</ItemGroup>
<Target Name = "Convert"
Inputs="@(TXTFile)"
Outputs="@(TXTFile->'%(Filename).content')">
<GenerateContentFiles
Sources = "@(TXTFile)">
<Output TaskParameter = "OutputContentFiles"
ItemName = "ContentFiles"/>
</GenerateContentFiles>
</Target>
<Target Name = "Build" DependsOnTargets = "Convert"
Inputs="@(ContentFiles);@(XMLFiles)"
Outputs="$(MSBuildProjectName).help">
<BuildHelp
ContentFiles = "@(ContentFiles)"
MetadataFiles = "@(XMLFiles)"
OutputFileName = "$(MSBuildProjectName).help"/>
</Target>
</Project>