Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przekształcenie jest jednokrotną konwersją jednej listy elementów na inną. Przekształcenia umożliwiają projektom w programie Visual Studio konwertowanie list elementów. Przekształcenia umożliwiają również obiektom docelowym identyfikowanie bezpośredniego mapowania między ich danymi wejściowymi i wyjściowymi.
W tym artykule wyjaśniono przekształcenia i sposób, w jaki aparat Microsoft Build Engine (MSBuild) używa ich do wydajniejszego kompilowania projektów.
Modyfikatory transformacji
Przekształcenia nie są definiowane arbitralnie. Każda transformacja jest identyfikowana jako modyfikator formatu %(\<ItemMetaDataName>). Wszystkie metadane elementu mogą być używane jako modyfikator transformacji, w tym dobrze znane metadane elementu przypisane do każdego elementu podczas tworzenia. Aby zapoznać się z ogólnie znaną listą metadanych elementu, zobacz MSBuild ogólnie znane metadane elementu.
Poniższy przykład przekształca listę plików resx na listę plików resources . Modyfikator przekształcania %(filename) określa, że każdy plik resources ma taką samą nazwę pliku jak odpowiedni plik resx :
@(RESXFile->'%(filename).resources')
Jeśli elementy na @(RESXFile) liście elementów to Form1.resx, Form2.resx i Form3.resx, przekształcona lista zawiera dane wyjściowe Form1.resources, Form2.resources i Form3.resources.
Uwaga / Notatka
Domyślnym separatorem elementów na przekształconej liście jest średnik ;. Separator niestandardowy można określić w taki sam sposób, jak separator dla listy elementów standardowych. Aby oddzielić elementy przecinkami , , użyj składni @(RESXFile->'Toolset\%(filename)%(extension)', ',').
Modyfikatory transformacji mnogich
Wyrażenie przekształcenia może zawierać wiele modyfikatorów, które można połączyć w dowolnej kolejności i można je powtórzyć. W poniższym przykładzie nazwa katalogu zawierającego pliki została zmieniona, ale pliki zachowują oryginalną nazwę i rozszerzenie nazwy pliku:
@(RESXFile->'Toolset\%(filename)%(extension)')
Jeśli elementy na RESXFile liście elementów to Project1\Form1.resx, Project1\Form2.resx i Project1\Form3.text, przekształcona lista zawiera elementy wyjściowe Toolset\Form1.resx, Toolset\Form2.resx i Toolset\Form3.text.
Mapowanie docelowe i analiza zależności
Przekształcenia gwarantują mapowanie jeden do jednego między przekształconą listą elementów a oryginalną listą elementów. Jeśli element docelowy tworzy dane wyjściowe, które są przekształceniami danych wejściowych, program MSBuild może analizować znaczniki czasu danych wejściowych i wyjściowych. Program MSBuild używa informacji do podjęcia decyzji, czy pominąć, zbudować, czy częściowo odbudować element docelowy.
W poniższym przykładzie dane wejściowe zadania kopiowania są przekształcane w dane wyjściowe. Każdy plik na liście elementów wejściowych BuiltAssemblies jest mapowany na plik w folderze docelowym zadania określonego za pomocą przekształcenia w atrybucie Outputs . Jeśli plik na BuiltAssemblies liście elementów ulegnie zmianie, Copy task uruchamia się tylko dla zmienionego pliku i pomija wszystkie pozostałe.
<Target Name="CopyOutputs"
Inputs="@(BuiltAssemblies)"
Outputs="@(BuiltAssemblies -> '$(OutputPath)%(Filename)%(Extension)')">
<Copy
SourceFiles="@(BuiltAssemblies)"
DestinationFolder="$(OutputPath)"/>
</Target>
Aby uzyskać więcej informacji na temat analizy zależności i sposobu używania przekształceń, zobacz Kompilacje przyrostowe programu MSBuild dla nowych lub nieaktualnych celów.
Plik projektu z przekształceniami
W poniższym przykładzie przedstawiono plik projektu dla programu MSBuild, który używa przekształceń. W przykładzie przyjęto założenie, że katalog c:\sub0\sub1\sub2\sub3 zawiera tylko jeden plik xsd , a katalog roboczy to c:\sub0.
<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>
W przykładzie są generowane następujące dane wyjściowe:
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
Treści powiązane
- pojęcia dotyczące programu MSBuild
- referencja programu MSBuild
- Przyrostowe kompilacje MSBuild dla nowych lub przestarzałych celów