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

When you بنية a قطر أيمن متوسط مشروع, it هو important that previously built مكونات that are still لأعلى-إلى-التاريخ are not rebuilt. If الجميع targets are built every الوقت, each بنية will take a long الوقت إلى إكمال. إلى تمكين تزايدي builds (builds في which فقط those targets that have not been built قبل أو targets that are خارج of التاريخ, are rebuilt), the Microsoft Build Engine (MSBuild) can يقارن the timestamps of the إدخال files مع the timestamps of the ملفات الإخراج و determine whether إلى تخطي, بنية, أو partially اعادة تجميع a الهدف. However, there must be a واحد-إلى-واحد mapping between inputs و مخرجات. You can استخدم transforms إلى تمكين targets إلى identify this direct mapping. للحصول على معلومات أكثر حول التحويلات، راجع التحويلات ‏‫MSBuild.

Specifying Inputs و مخرجات

هدف يمكن أن يكون بناء المتزايد إذا الإدخالات و مخرجات المحددة في ملف مشروع.

إلى تحديد الإدخالات والإخراجات لهدف

  • استخدم Inputsو Outputsالسمات الخاصة Targetعنصر. فعلى سبيل المثال:

    <Target Name="Build"

    Inputs="@(CSFile)"

    Outputs="hello.exe">

MSBuildيمكن يقارن الطوابع الزمنية ملفات إدخال مع الطابع الزمني لملفات الإخراج وتحديد ما إذا كان إلى تخطي بنية أو إعادة إنشائها بشكل جزئي الهدف. في المثال التالي، إذا كان أي ملف في @(CSFile)عنصر lهوt هو أحدث من الملف hello.exe، MSBuildستعمل الهدف; سيتم تخطي otherwهوe:

<Target Name="Build" 
    Inputs="@(CSFile)" 
    Outputs="hello.exe">

    <Csc
        Sources="@(CSFile)" 
        OutputAssembly="hello.exe"/>
</Target>

عندما يتم تحديد الإدخالات ومخرجات في هدف، يمكنك تعيين الإخراج كل إلى فقط أي إدخال أو قد لا يوجد تعيين مباشر بين الإدخالات ومخرجات. في السابق المهام csc، ل مثال، الإخراج، لا يمكن تعيين hello.exe، إلى أي إدخال مفرد – تعتمد عليها جميعا.

ملاحظة

هدف في الموضع الذي هو دائماً بنية لا التعيين المباشر بين الإدخالات ومخرجات غالباً المزيد هدف فيه كل الإخراج يمكن تعيين لإدخال واحد فقط لأن MSBuildلا يمكن تحديد الإخراج التي تحتاج إلى إعادة بنية إذا تم تم تغييره بعض الإدخالات.

Tكـks تحديد تعيين مباشر بين الإخراجات والإدخالات، مثل كـ LC المهام، هي الأكثر ملائمة للبنيات تزايدي، بعكس tكـks مثل كـ Cscو Vbc ، الذي ينتج إخراج كـ sembly واحد من عدد من الإدخالات.

مثال

يلي مثال يستخدم مشروع الذي ينشئ ملفات "التعليمات" لنظام "تعليمات" افتراضية. يعمل مشروع بتحويل ملفات.txt المصدر في في ملفات.محتوى المتوسطة، ثم ضم مع ملفات بيانات تعريف XML في إنتاج الملف النهائي.تعليمات المستخدمة من قبل النظام التعليمات. يستخدم مشروع افتراضية المهام التالية:

  • GenerateContentFiles: قم بتحويل ملفات.txt في. ملفات المحتوى.

  • BuildHelp: قم بدمج الملفات.محتوى وملفات بيانات تعريف XML إلى بإنشاء ملف.تعليمات النهائية.

يستخدم مشروع التحويلات إلى إنشاء مخطط one-إلى-one بين الإدخالات والإخراجات في GenerateContentFilesمهمة. لمزيد من المعلومات، راجع التحويلات ‏‫MSBuild. أيضا، Outputعنصر هو تعيين تلقائياً باستخدام الإخراج من GenerateContentFilesمهمة الإدخالات BuildHelpمهمة.

يحتوي ملف مشروع هذا على كلا من Convertو Buildالأهداف. GenerateContentFilesو BuildHelpيتم وضع المهام في Convertو Buildالهدف s على التوالي لذلك وكل الهدف يمكن أن يكون بناء المتزايد. باستخدام Outputالعنصر، الإخراج من GenerateContentFilestكـk توضع في ContentFileعنصر القائمة، بحيث يمكن استخدامها كـ يعد إدخالاً BuildHelptكـk. استخدام Outputفي auإلىmatically بهذه الطريقة يوفر عنصر الإخراج من مهمة واحدة الإدخالات لمهمة أخرى حيث لم يكن إلى سرد العناصر الفردية أو عنصر قائمة يدوياً في كل مهمة.

ملاحظة

على الرغم من أن GenerateContentFilesيمكن بناء الهدف بشكل متزايد، الجميع الإخراج من هذا الهدف دائماً مطلوبة كـ يعد إدخالاً BuildHelpالهدف. MSBuildتلقائياً بتوفير الجميع الإخراج من هدف واحد كـ الإدخالات لهدف آخر عند استخدامOutputالعنصر.

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >

    <ItemGroup>
        <TXTFile Include="*.txt"/>
        <XMLFile Include="\metadata\*.xml"/>
    </ItemGroup>

    <Target Name = "Convert"
        Inputs="@(TXTFile)"
        Outputs="@(TXTFile->'%(Filename).content')">

        <GenerateContentFiles
            Sources = "@(TXTFile)">
            <Output TaskParameter = "OutputContentFiles"
                ItemName = "ContentFiles"/>
        </GenerateContentFiles>
    </Target>

    <Target Name = "Build" DependsOnTargets = "Convert"
        Inputs="@(ContentFiles);@(XMLFiles)"
        Outputs="$(MSBuildProjectName).help">

        <BuildHelp
            ContentFiles = "@(ContentFiles)"
            MetadataFiles = "@(XMLFile)"
            OutputFileName = "$(MSBuildProjectName).help"/>
    </Target>
</Project>

راجع أيضًا:

المرجع

عنصر هدف (MSBuild)

المهام csc

المهام Vbc

المبادئ

الأهداف ‏‫MSBuild

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