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 ve Outputs özniteliklerini Target 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>