Sdílet prostřednictvím


Transformace nástroje MSBuild

Transformace je 1: 1 převod jedné položky seznamu do druhého.Kromě povolení projektu převést seznamy zboží umožňuje transformace cíl určit přímé mapování mezi jeho vstupů a výstupů.Toto téma vysvětluje, transformace a jak MSBuild používá k vytváření projektů efektivněji.

Modifikátory transformace

Transformace libovolného nejsou, ale jsou omezeny speciální syntaxi, ve kterém všechny modifikátory transformace musí být ve formátu %(ItemMetaDataName).Metadata položky lze použít jako modifikátor transformace.To zahrnuje metadata položky známých přiřazenou každé zboží při jeho vytvoření.Seznam známých položek metadat naleznete v tématu Metadata známé položky nástroje MSBuild.

V následujícím příkladu je seznam souborů, RESX transformovány do seznam souborů s příponou Resources.Modifikátor transformace %(filename) určuje, že každý soubor s příponou Resources má stejný název jako odpovídající soubor RESX.

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

[!POZNÁMKA]

Můžete zadat vlastní oddělovač transformovaný položky seznamu určete oddělovač pro standardní položky seznamu stejným způsobem.Například transformovaný položky seznamu oddělit pomocí čárky (,) místo výchozí středník (;), použijte následující kód XML.

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

Pokud jsou položky v seznamu položka @(RESXFile) Form1.resx, Form2.resx, a Form3.resx, výstupy v transformovaném seznamu bude Form1.resources, Form2.resources, a Form3.resources.

Použití více parametrů

Transformace výraz může obsahovat více modifikátory, ve kterých lze kombinovat v libovolném pořadí a lze opakovat.V následujícím příkladu je změněn název adresáře, který obsahuje soubory, ale zachovat soubory původní příponu názvu souboru a název.

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

Například položky, které jsou obsaženy v RESXFile položky seznamu jsou Project1\Form1.resx, Project1\Form2.resx, a Project1\Form3.text, výstupů transformovaný seznamu bude Toolset\Form1.resx, Toolset\Form2.resx, a Toolset\Form3.text.

Analýza závislost

Transformace zaručit mapování mezi transformovaný položky seznamu a původní položky seznamu.Proto, pokud cíl vytvoří výstupů, které jsou transformace vstupů, MSBuild lze analyzovat časová razítka vstupů a výstupů a rozhodnout, zda chcete přeskočit, sestavení nebo částečně znovu vytvořit cíl.

V Copy – úloha v následujícím příkladu každého souboru v BuiltAssemblies seznam položek se mapuje na soubor v cílové složce úloh, určené pomocí transformace Outputs atributu.Pokud soubor v BuiltAssemblies změny seznamu položek Copy bude úloha spuštěna pouze pro změněný soubor a další soubory budou přeskočeny.Další informace o závislostech analýzy a použití transformací viz Postupy: Přírůstkové sestavování.

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

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

</Target>

Příklad

Description

V následujícím příkladu MSBuild soubor projektu, který používá transformace.Tento příklad předpokládá, je v adresáři c:\sub0\sub1\sub2\sub3 pouze jeden soubor XSD a je c:\sub0 pracovní adresář.

Kód

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <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>

Komentáře

Tento příklad vytvoří následující výstup.

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

Viz také

Úkoly

Postupy: Přírůstkové sestavování

Další zdroje

Koncepty nástroje MSBuild

Referenční dokumentace nástroje MSBuild