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 "@(FileToDelete)""/>
</Target>
Как правило, при написании скриптов сборки следует определить, является ли удаление логической частью операции Clean
. Если необходимо очистить некоторые файлы в рамках обычной операции Clean
, их можно добавить в список @(FileWrites)
и они будут удалены при следующем выполнении Clean
. Если необходимо выполнить дополнительную пользовательскую обработку, определите целевой объект и запустите его, задав атрибут BeforeTargets="Clean"
или AfterTargets="Clean"
. Вы также можете определить пользовательскую версию целевых объектов BeforeClean
или AfterClean
. Дополнительные сведения см. в статье Настройка сборки и