Aracılığıyla paylaş


MSBuild dönüşümleri

Dönüşüm, bir öğe listesinin diğerine bire bir dönüştürülmesidir. Dönüşümler, Visual Studio'daki projelerin öğe listelerini dönüştürmesini sağlar. Dönüşümler, hedeflerin girişleri ve çıkışları arasında doğrudan eşleme belirlemesini de sağlar.

Bu makalede dönüşümler ve Microsoft Build Engine'in (MSBuild) projeleri daha verimli bir şekilde oluşturmak için bunları nasıl kullandığı açıklanmaktadır.

Dönüşüm değiştiricileri

Dönüşümler rastgele tanımlanmamıştır. Her dönüşüm, biçiminin %(\<ItemMetaDataName>)değiştiricisi olarak tanımlanır. Tüm öğe meta verileri, oluşturma sırasında her öğeye atanan iyi bilinen öğe meta verileri de dahil olmak üzere bir dönüşüm değiştirici olarak kullanılabilir. İyi bilinen öğe meta verileri listesi için bkz. MSBuild iyi bilinen öğe meta verileri.

Aşağıdaki örnek, .resx dosyalarının listesini .resources dosyaları listesine dönüştürür. Dönüşüm değiştirici, %(filename) her .resources dosyasının karşılık gelen .resx dosyasıyla aynı dosya adına sahip olduğunu belirtir:

@(RESXFile->'%(filename).resources')

Öğe listesindeki öğeler @(RESXFile)Form1.resx, Form2.resx ve Form3.resx ise, dönüştürülen liste Form1.resources, Form2.resources ve Form3.resources çıkışlarını içerir.

Uyarı

Dönüştürülen listedeki öğeler için varsayılan ayırıcı noktalı virgüldür ;. Özel ayırıcıyı, standart öğe listesi için ayırıcı belirttiğiniz şekilde belirtebilirsiniz. Öğeleri virgülle , ayırmak için söz dizimini @(RESXFile->'Toolset\%(filename)%(extension)', ',')kullanın.

Birden çok dönüşüm değiştirici

Dönüştürme ifadesi, herhangi bir sırada birleştirilebilen ve yinelenebilen birden çok değiştirici içerebilir. Aşağıdaki örnekte, dosyaları içeren dizinin adı değiştirilir, ancak dosyalar özgün adı ve dosya adı uzantısını korur:

@(RESXFile->'Toolset\%(filename)%(extension)')

Öğe listesindeki öğeler RESXFileProject1\Form1.resx, Project1\Form2.resx ve Project1\Form3.text ise, dönüştürülen liste Araç Takımı\Form1.resx, Araç Takımı\Form2.resx ve Araç Takımı\Form3.text çıkışlarını içerir.

Hedef eşleme ve bağımlılık analizi

Dönüşümler, dönüştürülen öğe listesi ile özgün öğe listesi arasında bire bir eşlemeyi garanti eder. Hedef, girişlerin dönüşümleri olan çıkışlar oluşturursa, MSBuild girişlerin ve çıkışların zaman damgalarını analiz edebilir. MSBuild, bir hedefi atlamayı, derlemeyi veya kısmen yeniden oluşturmayı karar vermek için bu bilgileri kullanır.

Aşağıdaki örnek , Kopyalama görevinin girişlerini çıkışlara dönüştürür. Giriş öğesi BuiltAssemblies listesindeki her dosya, özniteliğinde bir dönüşüm kullanılarak belirtilen görevin hedef klasöründeki bir dosyaya Outputs eşler. Öğe listesindeki bir dosya BuiltAssemblies değişirse, Copy task yalnızca değiştirilen dosya için çalıştırılır ve diğer tüm dosyaları atlar.

<Target Name="CopyOutputs"
    Inputs="@(BuiltAssemblies)"
    Outputs="@(BuiltAssemblies -> '$(OutputPath)%(Filename)%(Extension)')">

    <Copy
        SourceFiles="@(BuiltAssemblies)"
        DestinationFolder="$(OutputPath)"/>

</Target>

Bağımlılık analizi ve dönüşümleri nasıl kullanacağınız hakkında daha fazla bilgi için yeni veya eski hedefler için MSBuild artımlı derlemeleri bkz.

Dönüşümleri olan proje dosyası

Aşağıdaki örnekte, MSBuild için dönüşümleri kullanan bir proje dosyası gösterilmektedir. Örnekte c:\sub0\sub1\sub2\sub3 dizininin yalnızca bir .xsd dosyası içerdiği ve çalışma dizininin c:\sub0 olduğu varsayılır.

<Project>
    <ItemGroup>
        <Schema Include="sub1\**\*.xsd"/>
    </ItemGroup>

    <Target Name="Messages">
        <Message Text="rootdir: @(Schema->'%(rootdir)')"/>
        <Message Text="fullpath: @(Schema->'%(fullpath)')"/>
        <Message Text="rootdir + directory + filename + extension: @(Schema->'%(rootdir)%(directory)%(filename)%(extension)')"/>
        <Message Text="identity: @(Schema->'%(identity)')"/>
        <Message Text="filename: @(Schema->'%(filename)')"/>
        <Message Text="directory: @(Schema->'%(directory)')"/>
        <Message Text="relativedir: @(Schema->'%(relativedir)')"/>
        <Message Text="extension: @(Schema->'%(extension)')"/>
    </Target>
</Project>

Örnek aşağıdaki çıkışı oluşturur:

rootdir: C:\
fullpath: C:\sub0\sub1\sub2\sub3\myfile.xsd
rootdir + directory + filename + extension: C:\sub0\sub1\sub2\sub3\myfile.xsd
identity: sub1\sub2\sub3\myfile.xsd
filename: myfile
directory: sub0\sub1\sub2\sub3\
relativedir: sub1\sub2\sub3\
extension: .xsd