Udostępnij za pośrednictwem


Delete — Zadanie

Usuwa określone pliki.

Parametry

W poniższej tabeli opisano parametry Delete zadania.

Parametr Opis
DeletedFiles Opcjonalny ITaskItem[] parametr wyjściowy.

Określa pliki, które zostały pomyślnie usunięte.
Files Wymagany parametr interfejsu ITaskItem[].

Określa pliki do usunięcia.
TreatErrorsAsWarnings Opcjonalny Boolean parametr

Jeśli trueparametr , błędy są rejestrowane jako ostrzeżenia. Wartość domyślna to false.

Uwagi

Oprócz parametrów wymienionych powyżej to zadanie dziedziczy parametry z TaskExtension klasy, która sama dziedziczy z Task klasy. Aby uzyskać listę tych dodatkowych parametrów i ich opisy, zobacz TaskExtension, klasa bazowa.

Ostrzeżenie

Podczas korzystania z symboli wieloznacznych w Delete zadaniu należy zachować ostrożność. Możesz łatwo usunąć nieprawidłowe pliki z wyrażeniami takimi jak $(SomeProperty)\**\*.* lub $(SomeProperty)/**/*.*, zwłaszcza jeśli właściwość zwróci wartość pustego ciągu, w tym przypadku Files parametr może ocenić katalog główny dysku i usunąć znacznie więcej niż chcesz usunąć.

Przykłady

Poniższy przykład usuwa plik ConsoleApp1.pdb podczas kompilowania DeleteDebugSymbolFile obiektu docelowego.

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

Jeśli chcesz śledzić usunięte pliki, ustaw wartość TaskParameter na DeletedFiles z nazwą elementu w następujący sposób:

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

Zamiast bezpośrednio używać symboli wieloznacznych w Delete zadaniu, utwórz ItemGroup plik do usunięcia i uruchomienia Delete zadania. Ale pamiętaj, aby dokładnie umieścić ItemGroup . Jeśli umieścisz element ItemGroup na najwyższym poziomie w pliku projektu, zostanie on oceniony na wczesnym etapie przed rozpoczęciem kompilacji, więc nie będzie zawierać żadnych plików, które zostały skompilowane w ramach procesu kompilacji. Dlatego umieść element ItemGroup , który tworzy listę elementów do usunięcia w obiekcie docelowym w pobliżu Delete zadania. Można również określić warunek, aby sprawdzić, czy właściwość nie jest pusta, aby nie utworzyć listy elementów ze ścieżką rozpoczynającą się od katalogu głównego dysku.

W poniższym przykładzie wszystkie pliki z rozszerzeniem .orig w określonym folderze są usuwane.

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

Uwaga

W przypadku używania symboli wieloznacznych do usuwania plików generowanych podczas procesu kompilacji należy pamiętać o tym, kiedy w procesie kompilacji następuje rozszerzanie symboli wieloznacznych. W poprzednim przykładzie ItemGroup obiekt z rozszerzeniem wieloznacznym znajduje się w tym samym miejscu docelowym co usunięcie, co gwarantuje, że każdy plik utworzony przed tym elementem docelowym znajduje się na liście usuwania. Grupy elementów na najwyższym poziomie są rozszerzane w czasie oceny, co spowoduje pominięcie wszystkich plików wygenerowanych w dalszej części procesu kompilacji.

Zadanie Delete jest przeznaczone do usuwania plików. Jeśli chcesz usunąć katalog, użyj polecenia RemoveDir.

Zadanie Delete nie udostępnia opcji usuwania plików tylko do odczytu. Aby usunąć pliki tylko do odczytu, możesz użyć Exec zadania , aby uruchomić del polecenie lub odpowiednik, z odpowiednią opcją, aby włączyć usuwanie plików tylko do odczytu. Musisz zwrócić uwagę na długość listy elementów wejściowych, ponieważ w wierszu polecenia występuje ograniczenie długości, a także upewnij się, że są obsługiwane nazwy plików ze spacjami, jak w tym przykładzie:

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

Ogólnie rzecz biorąc, podczas pisania skryptów kompilacji należy rozważyć, czy usunięcie jest logicznie częścią Clean operacji. Jeśli musisz ustawić niektóre pliki do wyczyszczenia w ramach normalnej Clean operacji, możesz dodać je do @(FileWrites) listy i zostaną usunięte w następnym Cleanpliku . Jeśli potrzebne jest więcej przetwarzania niestandardowego, zdefiniuj element docelowy i określ, aby go uruchomić, ustawiając atrybut BeforeTargets="Clean" lub AfterTargets="Clean", lub zdefiniuj niestandardową wersję BeforeClean obiektów docelowych lub AfterClean . Zobacz Dostosowywanie kompilacji.

Zobacz też