Freigeben über


Delete-Aufgabe

Löscht die angegebene Datei.

Parameter

In der folgenden Tabelle werden die Parameter der Delete -Aufgabe beschrieben.

Parameter Beschreibung
DeletedFiles Optionaler ITaskItem[]-Ausgabeparameter.

Gibt die Dateien an, die erfolgreich gelöscht wurden.
Files Erforderlicher ITaskItem[]-Parameter.

Legt die zu löschenden Dateien fest.
TreatErrorsAsWarnings Optionaler Boolean-Parameter

Wenn true, werden Fehler als Warnungen protokolliert. Der Standardwert ist false.

Hinweise

Zusätzlich zu den oben aufgeführten Parametern erbt diese Aufgabe Parameter von der TaskExtension-Klasse, die selbst von der Task-Klasse erbt. Eine Liste mit diesen zusätzlichen Parametern und ihren Beschreibungen finden Sie unter TaskExtension-Basisklasse.

Warnung

Seien Sie vorsichtig, wenn Sie Platzhalter mit dem Delete-Task verwenden. Es kann schnell passieren, dass Sie mit Ausdrücken wie $(SomeProperty)\**\*.* oder $(SomeProperty)/**/*.* die falschen Dateien löschen, insbesondere dann, wenn die Eigenschaft als leere Zeichenfolge ausgewertet wird. In diesem Fall kann der Files-Parameter in das Stammverzeichnis Ihres Laufwerks ausgewertet werden, was dazu führen kann, dass deutlich mehr gelöscht wird als gewünscht.

Beispiele

Im folgenden Beispiel wird die Datei ConsoleApp1.pdb gelöscht, wenn Sie das Ziel DeleteDebugSymbolFile erstellen.

<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>

Wenn Sie die gelöschten Dateien nachverfolgen müssen, legen Sie TaskParameter auf DeletedFiles mit dem Elementnamen wie folgt fest:

      <Target Name="DeleteDebugSymbolFile">
        <Delete Files="$(OutDir)$(AppName).pdb" >
              <Output TaskParameter="DeletedFiles" ItemName="DeletedList"/>
        </Delete>
        <Message Text="Deleted files: '@(DeletedList)'"/>
    </Target>

Anstatt Platzhalterzeichen direkt in der Delete-Aufgabe zu verwenden, erstellen Sie eine ItemGroup von zu löschenden Dateien und wenden danach die Delete-Aufgabe auf diese an. Stellen Sie jedoch sicher, dass Sie die ItemGroup überlegt platzieren. Wenn Sie in einer Projektdatei eine ItemGroup auf der obersten Ebene platzieren, wird sie schon frühzeitig noch vor Beginn des Builds ausgewertet, sodass sie keine Dateien enthält, die beim Buildprozess erstellt wurden. Platzieren Sie daher die ItemGroup, die die Liste der zu löschenden Elemente erstellt, in einem Ziel in der Nähe der Delete-Aufgabe. Sie können auch eine Bedingung angeben, um zu prüfen, dass die Eigenschaft nicht leer ist, damit Sie keine Elementliste mit einem Pfad erstellen, der beim Stammverzeichnis des Laufwerks beginnt.

Im folgenden Beispiel werden alle Dateien mit der Erweiterung .orig in einem bestimmten Ordner gelöscht.

<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>

Hinweis

Beachten Sie bei der Verwendung von Platzhaltern zum Löschen von Dateien, die während des Buildprozesses generiert wurden, wann die Platzhaltererweiterung im Buildprozess auftritt. Im vorherigen Beispiel befindet sich das Element ItemGroup mit der Platzhaltererweiterung im selben Ziel wie der Löschvorgang. Dadurch wird sichergestellt, dass jede Datei, die vor diesem Ziel erstellt wurde, in der Löschliste enthalten ist. Elementgruppen auf oberster Ebene werden zur Auswertungszeit erweitert, wodurch später im Buildprozess generierte Dateien nicht berücksichtigt werden würden.

Die Delete-Aufgabe dient zum Löschen von Dateien. Wenn Sie ein Verzeichnis löschen möchten, verwenden Sie RemoveDir.

Die Delete-Aufgabe bietet keine Option zum Löschen schreibgeschützter Dateien. Um schreibgeschützte Dateien zu löschen, können Sie die Exec-Aufgabe verwenden, um den Befehl del oder einen gleichwertigen Befehl mit der entsprechenden Option zum Aktivieren des Löschens schreibgeschützter Dateien auszuführen. Sie müssen auf die Länge der Eingabeelementliste achten, da eine Längenbeschränkung für die Befehlszeile gilt. Außerdem müssen Sie dafür sorgen, dass Dateinamen mit Leerzeichen wie in diesem Beispiel behandelt werden:

<Target Name="DeleteReadOnly">
  <ItemGroup>
    <FileToDelete Include="read only file.txt"/>
  </ItemGroup>
  <Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/>
</Target>

Berücksichtigen Sie beim Schreiben von Buildskripts im Allgemeinen, ob Ihr Löschvorgang logisch Teil eines Clean-Vorgangs ist. Wenn Sie einige Dateien festlegen müssen, die als Teil eines normalen Clean-Vorgangs bereinigt werden sollen, können Sie sie zur Liste @(FileWrites) hinzufügen, damit sie beim nächsten Clean-Vorgang gelöscht werden. Wenn mehr benutzerdefinierte Verarbeitung erforderlich ist, definieren Sie ein Ziel. Geben Sie an, dass es ausgeführt werden soll, indem Sie das Attribut BeforeTargets="Clean" oder AfterTargets="Clean" festlegen, oder definieren Sie Ihre benutzerdefinierte Version der Ziele BeforeClean oder AfterClean. Weitere Informationen finden Sie unter Anpassen Ihres Builds.

Siehe auch