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 &quot;@(FileToDelete)&quot;"/>
</Target>

通常,在编写生成脚本时,请考虑删除在逻辑上是否为 Clean 操作的一部分。 如果需要在常规 Clean 操作中设置一些要清理的文件,可以将这些文件添加到 @(FileWrites) 列表,它们将在下一个 Clean 上删除。 如果需要更多自定义处理,请定义一个目标,并通过设置属性 BeforeTargets="Clean"AfterTargets="Clean" 指定其运行,或者定义 BeforeCleanAfterClean 目标的自定义版本。 请参阅自定义生成

请参阅