Copy (tarea)

Copia los archivos en una nueva ubicación del sistema de archivos.

Parámetros

En la siguiente tabla se describen los parámetros de la tarea Copy .

Parámetro Descripción
CopiedFiles Parámetro de salida ITaskItem[] opcional.

Contiene los elementos que se han copiado correctamente, incluidos aquellos que no se han copiado realmente, sino que se han omitido porque ya estaban actualizados y SkipUnchangedFiles era true.
DestinationFiles Parámetro ITaskItem[] opcional.

Especifica la lista de archivos en la que se copiarán los archivos de código fuente. Se espera que esta lista sea una asignación unívoca con la lista especificada en el parámetro SourceFiles. Es decir, el primer archivo especificado en SourceFiles se copiará en la primera ubicación especificada en DestinationFiles, etc.
DestinationFolder Parámetro ITaskItem opcional.

Especifica el directorio en el que desea copiar los archivos. Este debe ser un directorio, no un archivo. Si el directorio no existe, se crea automáticamente.
OverwriteReadOnlyFiles Parámetro Boolean opcional.

Sobrescribe los archivos aunque estén marcados como archivos de solo lectura
Retries Parámetro Int32 opcional.

Especifica cuántas veces se intentará copiar, si se produjera un error en todos los intentos anteriores. Se establece en cero de forma predeterminada.

Advertencia: El uso de reintentos puede enmascarar un problema de sincronización en el proceso de compilación.

Nota: Aunque el valor predeterminado de la tarea es de cero reintentos, los usos de la tarea suelen pasar $(CopyRetryCount), que es distinto de cero de forma predeterminada.
RetryDelayMilliseconds Parámetro Int32 opcional.

Especifica el retraso entre los reintentos necesarios. Adopta como valor predeterminado el argumento RetryDelayMillisecondsDefault, que se pasa al constructor CopyTask.
SkipUnchangedFiles Parámetro Boolean opcional.

Si es true, se omite la copia de los archivos sin modificar entre el origen y destino. La tarea Copy considera que los archivos están sin modificar si tienen el mismo tamaño y la misma hora de última modificación.

Nota: Si se establece este parámetro como true, no debe usar el análisis de dependencias en el destino continente, ya que solo se ejecuta la tarea si las horas de última modificación de los archivos de origen son más recientes que las de los archivos de destino.
SourceFiles Parámetro ITaskItem[] requerido.

Especifica los archivos que se van a copiar.
UseHardlinksIfPossible Parámetro Boolean opcional.

Si es true, crea vínculos físicos para los archivos copiados en lugar de copiar los archivos.
UseSymbolicLinksIfPossible Parámetro Boolean opcional.

Si es true, crea vínculos simbólicos para los archivos copiados en lugar de copiar los archivos, si es posible.

Advertencias

Las advertencias se registran, incluidos:

  • Copy.DestinationIsDirectory

  • Copy.SourceIsDirectory

  • Copy.SourceFileNotFound

  • Copy.CreatesDirectory

  • Copy.HardLinkComment

  • Copy.RetryingAsFileCopy

  • Copy.FileComment

  • Copy.RemovingReadOnlyAttribute

Observaciones

Se debe especificar el parámetro DestinationFolder o DestinationFiles, pero no ambos. Si se especifican los dos, la tarea produce un error y se registra un error.

Además de los parámetros mencionados anteriormente, esta tarea hereda los parámetros de la clase TaskExtension, que a su vez hereda de la clase Task. Para obtener una lista de estos parámetros adicionales y sus descripciones, consulte TaskExtension base class.

Ejemplo 1

En el ejemplo siguiente se copian los elementos de la colección de elementos MySourceFiles en la carpeta 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>

Ejemplo 2

En el ejemplo siguiente se muestra cómo hacer una copia recursiva. Este proyecto copia de forma recursiva todos los archivos de c:\MySourceTree en c:\MyDestinationTree, manteniendo la estructura de directorios.

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

Vea también