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>

См. также