Como: Criar incrementalmente
Quando você compilação um projeto grande, é importante que criados anteriormente componentes que são atualizados ainda não são reconstruídos.Se todos os destinos são criados cada vez, cada compilação irá demorar para concluir.Para habilitar incremental compilação s (compilação s em que somente os destinos que não foram criados antes ou destinos que estão desatualizados, são reconstruídos), a Mecanismo de compilação Microsoft (MSBuild) pode comparar os carimbos de data/hora dos arquivos de entrada com carimbos de data/hora dos arquivos de saída e determinar se deve ignorar, compilação, ou parcialmente re compilação um destino. No entanto, deve haver um mapeamento um-para-um entre entradas e saídas.Você pode usar transformações para habilitar destinos para identificar esse mapeamento direto.Para obter mais informações sobre transformações, consulte MSBuild transformações.
Especificando entradas e saídas
Um destino pode ser criado incrementalmente se as entradas e saídas forem especificadas no arquivo de projeto.
Especificar entradas e saídas para um destino
Use o Inputs e Outputs atributos da Target elemento. Por exemplo:
<Target Name="Build" Inputs="@(CSFile)" Outputs="hello.exe">
MSBuild comparar os carimbos de data/hora dos arquivos de entrada com carimbos de data/hora dos arquivos de saída e determinar se deve ignorar, construir ou recompilar parcialmente um destino. No exemplo a seguir, se qualquer arquivo no @(CSFile) item de coleção é mais recente do que o arquivo hello.exe, MSBuild será executada no destino; caso contrário, ele será ignorado:
<Target Name="Build"
Inputs="@(CSFile)"
Outputs="hello.exe">
<Csc
Sources="@(CSFile)"
OutputAssembly="hello.exe"/>
</Target>
Quando entradas e saídas forem especificadas em um destino, qualquer saída de cada pode MAP apenas uma entrada ou há podem ser não ping MAP direto entre entradas e saídas.No anterior Tarefa CSC, por exemplo, a saída hello.exe, não pode ser mapeado para qualquer entrada única – depende de todos eles.
Observação: |
---|
Um destino no qual não há nenhum mapeamento direto entre entradas e saídas serão sempre compilação com mais freqüência do que um destino no qual cada saída pode mapear para apenas um dado porque MSBuild não é possível determinar quais saídas precisam ser recriados se algumas das entradas foram alterados. |
Tarefas que você pode identificar um mapeamento direto entre sistema autônomo saídas e entradas, sistema autônomo a LC tarefas, são mais adequados para compilações incrementais, ao contrário das tarefas, sistema autônomo Csc e Vbc, que produzem um assembly de saída de um número de entradas.
Exemplo
O exemplo a seguir utiliza um projeto que compila arquivos de ajuda para um sistema hipotético de Ajuda.O projeto funciona através da conversão de arquivos .txt de fonte em arquivos .Conteúdo intermediário, que são combinados com arquivos de metadados XML para produzir o arquivo .help final usado pelo sistema de Ajuda.O projeto usa as seguintes tarefas hipotéticos:
GenerateContentFiles: Converte arquivos .txt em .Conteúdo arquivos.
BuildHelp: Combina .Conteúdo arquivos e arquivos de metadados XML para compilação arquivo .help final.
O projeto usa transformações para criar um mapeamento um-para-um entre entradas e saídas no GenerateContentFiles tarefa. Para obter mais informações, consulte MSBuild transformações.Além disso, a Output o elemento é conjunto para usar automaticamente sistema autônomo saídas da GenerateContentFiles tarefa sistema autônomo entradas para o BuildHelp tarefa.
Este arquivo de projeto contém o Convert e Build alvos. The GenerateContentFiles e BuildHelp tarefas são colocadas na Convert e Build visa respectivamente, de modo que cada destino pode ser criado incrementalmente. Usando o Output elemento, sistema autônomo saídas da GenerateContentFiles tarefa são colocados na ContentFile item da coleção, onde eles podem ser usados sistema autônomo entradas para o BuildHelp tarefa. Usando o Output elemento dessa maneira automaticamente fornece sistema autônomo saídas de uma tarefa sistema autônomo entradas para outra tarefa para que não é necessário que listar itens individuais ou coleções de item manualmente em cada tarefa.
Observação: |
---|
Embora o GenerateContentFiles destino pode construir incrementalmente, todas sistema autônomo saídas de destino sempre são necessárias sistema autônomo entradas para o BuildHelp destino. MSBuild fornece automaticamente todas sistema autônomo saídas de um destino sistema autônomo entradas para outro destino ao usar o Output elemento. |
<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>