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 true wartość , 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 true program tworzy twarde linki dla skopiowanych plików zamiast kopiować pliki. |
UseSymbolicLinksIfPossible |
Opcjonalny Boolean parametr.Jeśli true program 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>