Delete 工作
刪除指定的檔案。
參數
下表說明 Delete
工作的參數。
參數 | 描述 |
---|---|
DeletedFiles |
選擇性的 ITaskItem[] 輸出參數。指定已成功刪除的檔案。 |
Files |
必要的 ITaskItem[] 參數。指定要刪除的檔案。 |
TreatErrorsAsWarnings |
選擇性的 Boolean 參數如果是 true ,即會將錯誤記錄為警告。 預設值是 false 。 |
備註
除了上述所列的參數,此項工作還會繼承 TaskExtension 類別中的參數,而該類別本身又繼承 Task 類別。 如需這些其他參數的清單及其描述,請參閱 TaskExtension 基底類別。
警告
當您搭配 Delete
工作使用萬用字元時請格外小心。 您可以使用 $(SomeProperty)\**\*.*
或 $(SomeProperty)/**/*.*
之類的運算式輕鬆刪除錯誤的檔案,特別是當屬性評估為空字串時,在此情況下,Files
參數可以評估為磁碟機的根目錄,並刪除更多項目 (比您想要刪除的更多)。
範例
下列範例會在建置 DeleteDebugSymbolFile
目標時刪除 ConsoleApp1.pdb 檔案。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<AppName>ConsoleApp1</AppName>
</PropertyGroup>
<Target Name="DeleteDebugSymbolFile">
<Message Text="Deleting $(OutDir)$(AppName).pdb"/>
<Delete Files="$(OutDir)$(AppName).pdb" />
</Target>
</Project>
如果您需要追蹤已刪除的檔案,請使用項目名稱將 TaskParameter
設定為 DeletedFiles
,如下所示:
<Target Name="DeleteDebugSymbolFile">
<Delete Files="$(OutDir)$(AppName).pdb" >
<Output TaskParameter="DeletedFiles" ItemName="DeletedList"/>
</Delete>
<Message Text="Deleted files: '@(DeletedList)'"/>
</Target>
請不要直接在 Delete
工作中使用萬用字元,而是建立待刪除檔案的 ItemGroup
,並對其執行 Delete
工作。 但是,請務必小心放置 ItemGroup
。 如果您將 ItemGroup
放在專案檔的最上層,則會在建置開始之前提早進行評估,造成其不會包含在建置過程中建置的任何檔案。 因此,請將建立待刪除項目清單的 ItemGroup
放在靠近 Delete
工作的目標中。 您也可以指定條件來確認屬性不是空白,讓您不會建立其路徑以磁碟機根目錄開頭的項目清單。
下列範例會刪除特定資料夾中副檔名為 .orig
的所有檔案。
<Project>
<Target Name="DeleteFiles" AfterTargets="Build">
<ItemGroup>
<FilesToDelete Include="source\*.orig"/>
</ItemGroup>
<Message Text="Deleting Files @(FilesToDelete)"/>
<Delete Files="@(FilesToDelete)">
<Output
TaskParameter="DeletedFiles"
ItemName="FilesDeleted"/>
</Delete>
<Message Text="Files deleted: @(FilesDeleted)"/>
</Target>
</Project>
注意
使用萬用字元刪除建置流程期間產生的檔案時,請注意建置流程中發生萬用字元展開的時間。 在上一個範例中,具有萬用字元展開的 ItemGroup
所在目標與刪除相同,這可確保在該目標之前建置的任何檔案都包含在刪除清單中。 最上層的項目群組會在評估階段展開,這會遺漏建置流程稍後產生的任何檔案。
Delete
工作的用途是刪除檔案。 如果您想要刪除目錄,請使用 RemoveDir。
Delete
工作不提供刪除唯讀檔案的選項。 若要刪除唯讀檔案,您可以使用 Exec
工作來執行 del
命令或對等命令,並搭配適當的選項來允許刪除唯讀檔案。 您必須注意輸入項目清單的長度,因為命令列有長度限制,也請務必處理具有空格的檔案名稱,如下列範例所示:
<Target Name="DeleteReadOnly">
<ItemGroup>
<FileToDelete Include="read only file.txt"/>
</ItemGroup>
<Exec Command="del /F /Q "@(FileToDelete)""/>
</Target>
一般而言,撰寫建置指令碼時,請考慮您的刪除在邏輯上是否屬於 Clean
作業的一部分。 如果您需要在標準 Clean
作業中設定要清除某些檔案,您可以將檔案新增至 @(FileWrites)
清單,這些檔案會在下一個 Clean
中刪除。 如果需要更多自訂處理,請定義目標,並藉由設定 BeforeTargets="Clean"
或 AfterTargets="Clean"
屬性來指定執行方式,或是定義 BeforeClean
或 AfterClean
目標的自訂版本。 請參閱自訂您的組建。