Copy — Zadanie

Kopiowanie plików do nowej lokalizacji w systemie plików.

Parametry

W poniższej tabeli opisano parametry Copy zadania.

Parametr Opis
CopiedFiles Opcjonalny ITaskItem[] parametr wyjściowy.

Zawiera elementy, które zostały pomyślnie skopiowane, w tym te, które nie zostały skopiowane, ale zostały pominięte, ponieważ były już aktualne i SkipUnchangedFiles były true.
DestinationFiles Opcjonalny ITaskItem[] parametr.

Określa listę plików, do których należy skopiować pliki źródłowe. Ta lista powinna być zmapowana jeden-do-jednego na listę określoną w parametrze SourceFiles. Oznacza to, że pierwszy plik określony w parametrze SourceFiles będzie kopiowany do pierwszej lokalizacji określonej w parametrze DestinationFiles itd.
DestinationFolder Opcjonalny ITaskItem parametr.

Określa katalog, do którego pliki mają zostać skopiowane. Musi to być katalog, a nie plik. Jeśli katalog nie istnieje, zostanie utworzony automatycznie.
OverwriteReadOnlyFiles Opcjonalny Boolean parametr.

Zastępowanie plików następuje nawet wtedy, gdy są oznaczone jako tylko do odczytu.
Retries Opcjonalny Int32 parametr.

Określa, ile razy należy podjąć próbę kopiowania, jeśli wszystkie poprzednie próby się nie powiodły. Domyślnie przyjmuje wartość zero.

Uwaga: użycie ponownych prób może maskować problem z synchronizacją w procesie kompilacji.

Uwaga: Podczas gdy domyślna wartość zadania to zero ponownych prób, użycie zadania często przekazuje $(CopyRetryCount) wartość niezerową.
RetryDelayMilliseconds Opcjonalny Int32 parametr.

Określa opóźnienie między kolejnymi niezbędnymi ponownymi próbami. Wartością domyślną jest wartość argumentu RetryDelayMillisecondsDefault, który jest przekazywany do konstruktora CopyTask.
SkipUnchangedFiles Opcjonalny Boolean parametr.

Domyślnie . false Jeśli ustawiono wartość true, pomija kopiowanie plików bez zmian między źródłem a miejscem docelowym. Zadanie Copy uznaje pliki za niezmienione, jeśli mają taki sam rozmiar i taki sam czas ostatniej modyfikacji.

Uwaga: Jeśli ustawisz ten parametr na truewartość , nie należy używać analizy zależności w obiekcie docelowym zawierającym, ponieważ uruchamia to zadanie tylko wtedy, gdy czas ostatniej modyfikacji plików źródłowych jest nowszy niż czas ostatniej modyfikacji plików docelowych.
SourceFiles Wymagany parametr interfejsu ITaskItem[].

Określa pliki do skopiowania.
UseHardlinksIfPossible Opcjonalny Boolean parametr.

Jeśli trueprogram tworzy twarde linki dla skopiowanych plików zamiast kopiować pliki.
UseSymbolicLinksIfPossible Opcjonalny Boolean parametr.

Jeśli trueprogram tworzy łącza symboliczne dla skopiowanych plików, zamiast kopiować pliki, jeśli jest to możliwe.

Ostrzeżenia

Ostrzeżenia są rejestrowane, w tym:

  • Copy.DestinationIsDirectory

  • Copy.SourceIsDirectory

  • Copy.SourceFileNotFound

  • Copy.CreatesDirectory

  • Copy.HardLinkComment

  • Copy.RetryingAsFileCopy

  • Copy.FileComment

  • Copy.RemovingReadOnlyAttribute

Uwagi

Musi być określony parametr DestinationFolder lub DestinationFiles, ale nie oba. W razie podania obu parametrów zadanie nie powiedzie się i zostanie zarejestrowany błąd.

Oprócz parametrów wymienionych powyżej to zadanie dziedziczy parametry z TaskExtension klasy, która sama dziedziczy z Task klasy. Aby uzyskać listę tych dodatkowych parametrów i ich opisy, zobacz TaskExtension, klasa bazowa.

Przykład 1

Poniższy przykład kopiuje elementy w MySourceFiles kolekcji elementów do folderu 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>

Przykład 2

Poniższy przykład ilustruje, jak wykonać kopiowanie cykliczne. Ten projekt kopiuje wszystkie pliki rekursywnie z c:\MySourceTree do c:\MyDestinationTree, zachowując strukturę katalogu.

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

Zobacz też