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