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í