Copy Task
Copies files on the filesystem to a new location.
Parameters
The folowing table describes the parameters of the Copy task.
Parameter | Description |
---|---|
CopiedFiles |
Optional ITaskItem[] output parameter. Contains the items that were successfully copied. |
DestinationFiles |
Optional ITaskItem[] parameter. Specifies the list of files to copy the source files to. This list is expected to be a one-to-one mapping with the list specified in the SourceFiles parameter. That is, the first file specified in SourceFiles will be copied to the first location specified in DestinationFiles, and so forth. |
DestinationFolder |
Optional ITaskItem parameter. Specifies the directory to which you want to copy the files. This must be a directory, not a file. If the directory does not exist, it is created automatically. |
SkipUnchangedFiles |
Optional Boolean parameter. If true, skips the copying of files that are unchanged between the source and destination. The Copy task considers files to be unchanged if they have the same size and the same last modified time. Note If you set this parameter to true, you should not use dependency analysis on the containing target, because that only runs the task if the last-modified times of the source files are newer than the last-modified times of the destination files. |
SourceFiles |
Required ITaskItem[] parameter. Specifies the files to copy. |
Remarks
Either the DestinationFolder or the DestinationFiles parameter must be specified, but not both. If both are specified, the task fails and an error is logged.
Example
The following example copies the items in the MySourceFiles
item collection into the folder c:\MyProject\Destination.
<Project xmlns="https://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>
The following example demonstrates how to do a recursive copy. This project copies all of the files recursively from c:\MySourceTree into c:\MyDestinationTree, while maintaining the directory structure.
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MySourceFiles Include="c:\MySourceTree\**\*.*"/>
</ItemGroup>
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFiles="@(MySourceFiles->'c:\MyDestinationTree\%(RecursiveDir)%(Filename)%(Extension)')"
/>
</Target>
</Project>