Поделиться через


Delete - задача

Удаляет указанные файлы.

Параметры

В следующей таблице приводятся параметры задачи Delete.

Параметр Описание
DeletedFiles Необязательный выходной параметр ITaskItem[] .

Указывает файлы, которые были успешно удалены.
Files Обязательный параметр ITaskItem[] .

Указывает файлы для удаления.
TreatErrorsAsWarnings Необязательный параметр Boolean.

Если true, ошибки регистрируются как предупреждения. Значение по умолчанию — false.

Замечания

Помимо перечисленных выше параметров, эта задача наследует параметры от класса TaskExtension, который, в свою очередь, наследует от класса Task. Список этих дополнительных параметров и их описания см. в статье Базовый класс TaskExtension.

Предупреждение

Будьте осторожны при использовании подстановочных знаков в задаче Delete. Вы можете случайно удалить не те файлы, используя такие выражения, как $(SomeProperty)\**\*.* или $(SomeProperty)/**/*.*, особенно если для свойства задана пустая строка. В этом случае параметр Files может затронуть корень диска и удалить гораздо больше, чем требовалось.

Примеры

В следующем примере удаляется файл ConsoleApp1.pdb при выполнении сборки целевого объекта DeleteDebugSymbolFile.

<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". Вы также можете определить пользовательскую версию целевых объектов BeforeClean или AfterClean. Дополнительные сведения см. в статье Настройка сборки и

См. также