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>