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 parametrJeśli true parametr , 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 "@(FileToDelete)""/>
</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 Clean
pliku . 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.