Copy (attività)

Copia i file in un nuovo percorso del file system.

Parametri

Nella tabella che segue vengono descritti i parametri dell'attività Copy.

Parametro Descrizione
CopiedFiles Parametro di output ITaskItem[] facoltativo.

Contiene gli elementi copiati correttamente, inclusi quelli che non sono stati effettivamente copiati, ma sono stati ignorati perché erano già aggiornati e SkipUnchangedFiles erano true.
DestinationFiles Parametro ITaskItem[] facoltativo.

Specifica l'elenco di file in cui copiare i file di origine. Dovrebbe esistere un mapping uno-a-uno tra questo elenco e quello specificato nel parametro SourceFiles. In altri termini, il primo file specificato in SourceFiles verrà copiato nel primo percorso specificato in DestinationFilese così via.
DestinationFolder Parametro ITaskItem facoltativo.

Specifica la directory in cui si vogliono copiare i file. Deve trattarsi di una directory, non di un file. Se la directory non esiste, viene creata automaticamente.
OverwriteReadOnlyFiles Parametro Boolean facoltativo.

Sovrascrivi file anche se sono contrassegnati come file di sola lettura
Retries Parametro Int32 facoltativo.

Specifica il numero di tentativi da eseguire per la copia, se tutti i tentativi precedenti hanno avuto esito negativo. Il valore predefinito è zero.

Attenzione: l'uso dei tentativi può mascherare un problema di sincronizzazione nel processo di compilazione.

Nota: mentre il valore predefinito dell'attività è zero tentativi, l'uso dell'attività viene spesso passato $(CopyRetryCount) che è diverso da zero per impostazione predefinita.
RetryDelayMilliseconds Parametro Int32 facoltativo.

Specifica il ritardo tra eventuali nuovi tentativi necessari. Imposta come valore predefinito l'argomento RetryDelayMillisecondsDefault, che viene passato al costruttore CopyTask.
SkipUnchangedFiles Parametro Boolean facoltativo.

Per impostazione predefinita, false. Se impostato su true, ignora la copia dei file non modificati tra l'origine e la destinazione. L'attività Copy considera invariati i file con le stesse dimensioni e la stessa ora dell'ultima modifica.

Nota: Se questo parametro viene impostato su true, è consigliabile non usare l'analisi delle dipendenze nella destinazione contenitore, perché in questo caso l'attività viene eseguita soltanto se l'ora dell'ultima modifica dei file di origine è più recente rispetto a quella dei file di destinazione.
SourceFiles Parametro ITaskItem[] obbligatorio.

Specifica i file da copiare.
UseHardlinksIfPossible Parametro Boolean facoltativo.

Se true, crea collegamenti reali per i file copiati invece di copiare i file.
UseSymbolicLinksIfPossible Parametro Boolean facoltativo.

Se true, crea collegamenti simbolici per i file copiati anziché copiare i file, se possibile.

Avvisi

Gli avvisi vengono registrati, inclusi:

  • Copy.DestinationIsDirectory

  • Copy.SourceIsDirectory

  • Copy.SourceFileNotFound

  • Copy.CreatesDirectory

  • Copy.HardLinkComment

  • Copy.RetryingAsFileCopy

  • Copy.FileComment

  • Copy.RemovingReadOnlyAttribute

Osservazioni:

È necessario specificare il parametro DestinationFolder o DestinationFiles, ma non entrambi. Se vengono specificati entrambi, l'attività avrà esito negativo e verrà registrato un errore.

Oltre ai parametri elencati sopra, questa attività eredita i parametri dalla classe TaskExtension, che a sua volta eredita dalla classe Task. Per un elenco di questi parametri aggiuntivi e le rispettive descrizioni, vedere TaskExtension Base Class.

Esempio 1

Nell'esempio riportato di seguito gli elementi della raccolta MySourceFiles vengono copiati nella cartella 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>

Esempio 2

Nell'esempio riportato di seguito viene illustrato come creare una copia ricorsiva. Tutti i file del progetto vengono copiati in modo ricorsivo da c:\MySourceTree a c:\MyDestinationTree, mantenendo al tempo stesso la struttura di directory.

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

Vedi anche