التحويلات ‏‫MSBuild

A transform هو a واحد-إلى-واحد تحويل of واحد العنصر قائمة إلى another. في addition إلى enabling a مشروع إلى تحويل العنصر lists, a transform enables a الهدف إلى identify a direct mapping between its inputs و مخرجات. This موضوع explains transforms و how MSBuild uses them إلى بنية مشاريع المزيد efficiently.

Transform Modifiers

Transforms are not arbitrary, but are limited بواسطة خاص بناء الجملة في which الجميع transform modifiers must be في the تنسيق %(ItemMetaDataName). أي العنصر بيانات التعريف can be used كـ a transform معدّل. This يتضمن the well-known العنصر بيانات التعريف that هو تعيين إلى every العنصر when it هو تاريخ الإنشاء. For a قائمة of well-known العنصر بيانات التعريف, see MSBuild Well-known عنصر بيانات التعريف.

In the following مثال, a قائمة of .resx ملفات هو transformed في a قائمة of .موارد ملفات. The %(اسم الملف) transform معدّل specifies that each .موارد file has the same file name كـ the corresponding .Resx ملف.

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

ملاحظة

You can specify a مخصص فاصل for a transformed العنصر قائمة في the same way you specify a فاصل for a قياسي العنصر قائمة. For مثال, إلى separate a transformed العنصر قائمة بواسطة using a فاصلة (,) instead of the الافتراضي semicolon (;), استخدم the following XML.

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

For مثال, if the عناصر في the @(RESXFile) العنصر قائمة are Form1.resx, Form2.resx, و Form3.resx, the مخرجات في the transformed قائمة will be Form1.resources, Form2.resources, و Form3.resources.

Using Multiple Modifiers

A transform تعبير can contain multiple modifiers, which can be combined في أي ترتيب و can be repeated. في the following مثال, the name of the الدليل that يحتوي على the ملفات هو تم تغييره but the ملفات retain the الأصلي name و ملحق اسم الملف.

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

For مثال, if the عناصر that are contained في the RESXFile العنصر قائمة are Project1\Form1.resx, Project1\Form2.resx, و Project1\Form3.text, the مخرجات في the transformed قائمة will be Toolset\Form1.resx, Toolset\Form2.resx, و Toolset\Form3.text.

تبعية تحليل

Transforms guarantee a واحد-إلى-واحد mapping between the transformed العنصر قائمة و the الأصلي العنصر قائمة. Therefore, if a الهدف creates مخرجات that are transforms of the inputs, MSBuild can analyze the timestamps of the inputs و مخرجات, و decide whether إلى تخطي, بنية, أو partially اعادة تجميع a الهدف.

في the نسخ لمهمة على مستوى المؤسسة في the following مثال, every ملف في the BuiltAssemblies العنصر قائمة خرائط إلى a ملف في the مجلد وجهة of the مهمة, specified بواسطة using a transform في the Outputs سمة. If a ملف في the BuiltAssemblies العنصر قائمة التغييرات, the Copy مهمة will be تشغيل فقط for the تم تغييره ملف و الجميع غير ذلك ملفات will be skipped. ل المزيد من المعلومات حول تحليل تبعية وكيفية استخدام التحويلات، راجع كيفية القيام بما يلي: بنية المتزايد.

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

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

</Target>

المثال

الوصف

The following مثال shows an MSBuild ملف مشروع that uses transforms. This مثال assumes that there هو just واحد .XSD ملف في the c:\sub0\sub1\sub2\sub3 الدليل, و that the working الدليل هو c:\sub0.

الرمز

<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>

التعليقات

ينتج هذا المثال الإخراج التالي:

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

راجع أيضًا:

المهام

كيفية القيام بما يلي: بنية المتزايد

موارد أخرى

MSBuild Concepts

مرجع MSBuild