Condividi tramite


Usare i metadati degli elementi nell'invio in batch di destinazione

MSBuild ha la possibilità di eseguire l'analisi delle dipendenze sugli input e sugli output di una destinazione di compilazione. Se viene stabilito che l'input o output della destinazione sono aggiornati, la destinazione viene ignorata e la compilazione prosegue. Gli elementi Target usano gli attributi Inputs e Outputs per specificare gli elementi da controllare durante l'analisi delle dipendenze.

Se una destinazione contiene un'attività che usa elementi in batch come input o output, l'elemento Target della destinazione deve usare l'invio in batch nei relativi Inputs attributi o Outputs per consentire a MSBuild di ignorare i batch di elementi già aggiornati.

Destinazioni di batch

L'esempio seguente contiene un elenco di elementi denominato Res che viene suddiviso in due batch in base ai metadati dell'elemento Culture. Ognuno di questi batch viene passato nell'attività AL, che crea un assembly di output per ogni batch. Usando l'invio in batch sull'attributo Outputs dell'elemento Target , MSBuild può determinare se ognuno dei singoli batch è aggiornato prima di eseguire la destinazione. Senza usare la suddivisione in batch della destinazione, entrambi i batch di elementi verrebbero eseguiti dall'attività ogni volta che viene eseguita la destinazione.

<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <Res Include="Strings.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Strings.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.jp.resources">
            <Culture>jp</Culture>
        </Res>
    </ItemGroup>

    <Target Name="Build"
        Inputs="@(Res)"
        Outputs="%(Culture)\MyApp.resources.dll">

        <AL Resources="@(Res)"
            TargetType="library"
            OutputAssembly="%(Culture)\MyApp.resources.dll">
        </AL>

    </Target>

</Project>