tarefa Copy

Copia os arquivos para um novo local no sistema de arquivos.

Parâmetros

A tabela a seguir descreve os parâmetros da tarefa Copy.

Parâmetro Descrição
CopiedFiles Parâmetro de saída ITaskItem[] opcional.

Contém os itens que foram copiados com êxito, incluindo aqueles que não foram realmente copiados, mas foram ignorados porque já estavam atualizados e SkipUnchangedFiles era true.
DestinationFiles Parâmetro opcional ITaskItem[].

Especifica a lista de arquivos para a qual os arquivos de origem serão copiados. Essa lista deve ser um mapeamento um-para-um com a lista especificada no parâmetro SourceFiles. Ou seja, o primeiro arquivo especificado em SourceFiles será copiado para o primeiro local especificado em DestinationFiles e assim por diante.
DestinationFolder Parâmetro ITaskItem opcional.

Especifica o diretório para o qual você deseja copiar os arquivos. Isso deve ser um diretório, não um arquivo. Se o diretório não existir, ele será criado automaticamente.
OverwriteReadOnlyFiles Parâmetro Boolean opcional.

Substitua arquivos mesmo se eles estiverem marcados como arquivos somente leitura
Retries Parâmetro Int32 opcional.

Especifica o número de tentativas de cópia, se todas as tentativas anteriores falharam. Usa zero como padrão.

Atenção: o uso de repetições pode mascarar um problema de sincronização no processo de build.

Obs.: enquanto o padrão da tarefa for zero repetições, o uso da tarefa normalmente passará $(CopyRetryCount) que é, por padrão, diferente de zero.
RetryDelayMilliseconds Parâmetro Int32 opcional.

Especifica o atraso entre as tentativas necessárias. Usa como padrão o argumento RetryDelayMillisecondsDefault, que é passado para o construtor CopyTask.
SkipUnchangedFiles Parâmetro Boolean opcional.

Por padrão, false. Se definido como true, ignora a cópia de arquivos que estão inalterados entre a origem e o destino. A tarefa Copy considera os arquivos como inalterados se eles têm o mesmo tamanho e a mesma hora da última modificação.

Obs.: se você definir esse parâmetro como true, não deverá usar a análise de dependência no destino recipiente, pois isso apenas executará a tarefa se as horas de última modificação dos arquivos de origem forem mais recentes do que as horas de última modificação dos arquivos de destino.
SourceFiles Parâmetro ITaskItem[] obrigatório.

Especifica os arquivos a serem copiados.
UseHardlinksIfPossible Parâmetro Boolean opcional.

Se for true, criará links físicos para os arquivos copiados, em vez de copiar os arquivos.
UseSymbolicLinksIfPossible Parâmetro Boolean opcional.

Se for true, criará links simbólicos para os arquivos copiados, em vez de copiá-los, se isso for possível.

Warnings

Os avisos são registrados, incluindo:

  • Copy.DestinationIsDirectory

  • Copy.SourceIsDirectory

  • Copy.SourceFileNotFound

  • Copy.CreatesDirectory

  • Copy.HardLinkComment

  • Copy.RetryingAsFileCopy

  • Copy.FileComment

  • Copy.RemovingReadOnlyAttribute

Comentários

O parâmetro DestinationFolder ou DestinationFiles deve ser especificado, mas não ambos. Se os dois forem especificados, a tarefa falhará e um erro será registrado.

Além dos parâmetros listados acima, essa tarefa herda parâmetros da classe TaskExtension, que herda da classe Task. Para obter uma lista desses parâmetros adicionais e suas descrições, confira Classe base TaskExtension.

Exemplo 1

O exemplo a seguir copia os itens da coleção de itens MySourceFiles para a pasta c:\MyProject\Destination.

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

    <ItemGroup>
        <MySourceFiles Include="a.cs;b.cs;c.cs"/>
    </ItemGroup>

    <Target Name="CopyFiles">
        <Copy
            SourceFiles="@(MySourceFiles)"
            DestinationFolder="c:\MyProject\Destination"
        />
    </Target>

</Project>

Exemplo 2

O exemplo a seguir demonstra como fazer uma cópia recursiva. Esse projeto copia todos os arquivos recursivamente de c:\MySourceTree para c:\MyDestinationTree, mantendo a estrutura do diretório.

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

    <Target Name="CopyFiles">
        <ItemGroup>
            <!-- Because this ItemGroup is inside the target, this will enumerate
                 all files just before calling Copy. If the ItemGroup were outside
                 the target , it would enumerate the files during evaluation, before
                 the build starts, which may miss files created during the build. -->
            <MySourceFiles Include="c:\MySourceTree\**\*.*"/>
        </ItemGroup>

        <Copy
            SourceFiles="@(MySourceFiles)"
            DestinationFolder="c:\MyDestinationTree\%(RecursiveDir)"
        />
    </Target>

</Project>

Confira também