Copy - задача
Копирование файлов в новое расположение в файловой системе.
Параметры
В следующей таблице приводятся параметры задачи Copy
.
Параметр | Описание |
---|---|
CopiedFiles |
Необязательный выходной параметр ITaskItem[] .Содержит успешно скопированные элементы, включая те, которые не были скопированы на самом деле, но были пропущены, так как они уже обновлены, а SkipUnchangedFiles имел значение true . |
DestinationFiles |
Необязательный параметр ITaskItem[] .Указывает список, в который будут скопированы исходные файлы. Предполагается, что этот список будет взаимно-однозначно сопоставляться со списком в параметре SourceFiles . То есть первый файл из списка SourceFiles будет скопирован с использованием первого пути, заданного в списке DestinationFiles , и т. д. |
DestinationFolder |
Необязательный параметр ITaskItem. Указывает каталог, в который требуется скопировать файлы. Это должен быть каталог, а не файл. Если каталог не существует, он создается автоматически. |
OverwriteReadOnlyFiles |
Необязательный параметр Boolean .Перезапись файлов, даже доступных только для чтения. |
Retries |
Необязательный параметр Int32 .Задает количество повторений операции копирования в случае неудачи всех предыдущих попыток. По умолчанию установлен нуль. Внимание. Использование повторных попыток может маскирование проблемы синхронизации в процессе сборки. Примечание. Хотя значение по умолчанию для задачи равно нулю повторных попыток, часто использует $(CopyRetryCount) задачу, которая не является ненулевой по умолчанию. |
RetryDelayMilliseconds |
Необязательный параметр Int32 .Определяет задержку между любыми необходимыми попытками. По умолчанию равен аргументу RetryDelayMillisecondsDefault, который передается в конструктор CopyTask. |
SkipUnchangedFiles |
Необязательный параметр Boolean .По умолчанию false . Если задано значение true , пропускает копирование файлов, не изменяющихся между источником и назначением. В задаче Copy неизмененными считаются файлы одного размера с одинаковым временем последнего изменения. Примечание. Если этому параметру присвоено значение true , то выполнять анализ зависимостей в каталоге, содержащем целевые объекты, не следует, так как эта задача выполняется только в том случае, если время последнего изменения исходных файлов больше, чем у целевых файлов. |
SourceFiles |
Обязательный параметр ITaskItem[] .Указывает копируемые файлы. |
UseHardlinksIfPossible |
Необязательный параметр Boolean .Если этот параметр имеет значение true , вместо копирования файлов создаются жесткие ссылки для скопированных файлов. |
UseSymbolicLinksIfPossible |
Необязательный параметр Boolean .Если этот параметр имеет значение true , вместо копирования файлов создаются символические ссылки для скопированных файлов; используйте этот вариант, если это возможно. |
Предупреждения
Регистрируются следующие предупреждения.
Copy.DestinationIsDirectory
Copy.SourceIsDirectory
Copy.SourceFileNotFound
Copy.CreatesDirectory
Copy.HardLinkComment
Copy.RetryingAsFileCopy
Copy.FileComment
Copy.RemovingReadOnlyAttribute
Замечания
Можно указать либо параметр DestinationFolder
, либо DestinationFiles
, но не оба одновременно. В противном случае задача прерывает работу и в журнале регистрируется ошибка.
Помимо перечисленных выше параметров, эта задача наследует параметры от класса TaskExtension, который, в свою очередь, наследует от класса Task. Список этих дополнительных параметров и их описания см. в статье Базовый класс TaskExtension.
Пример 1
В следующем примере кода выполняется копирование элементов из коллекции MySourceFiles
в папку 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>
Пример 2
В следующем примере кода демонстрируется использование рекурсивного копирования. В этом проекте выполняется рекурсивное копирование всех файлов из папки c:\MySourceTree в папку c:\MyDestinationTree с сохранением структуры каталогов.
<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>