タスクを削除する
指定されたファイルを削除します。
パラメーター
Delete
タスクのパラメーターの説明を次の表に示します。
パラメーター | 説明 |
---|---|
DeletedFiles |
省略可能な ITaskItem[] 型の出力パラメーターです。正常に削除されたファイルを指定します。 |
Files |
必須の ITaskItem[] 型のパラメーターです。削除するファイルを指定します。 |
TreatErrorsAsWarnings |
省略可能な Boolean 型のパラメーターですtrue の場合、エラーは警告として記録されます。 既定値は false です。 |
解説
上記のパラメーター以外に、このタスクは TaskExtension クラスからパラメーターを継承します。このクラス自体は、Task クラスから継承されます。 これらの追加のパラメーターの一覧とその説明については、「TaskExtension Base Class」を参照してください。
警告
Delete
タスクでワイルドカードを使用する場合は注意してください。 $(SomeProperty)\**\*.*
や $(SomeProperty)/**/*.*
などの式を使用すると、間違ったファイルを簡単に削除できます。プロパティが空の文字列に評価される場合は特に、Files
パラメーターがドライブのルートに評価され、削除したいものよりもはるかに多く削除される場合があります。
例
次の例では、DeleteDebugSymbolFile
ターゲットをビルドするときにファイル ConsoleApp1.pdb が削除されます。
<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>
Note
ビルド プロセス中に生成されたファイルの削除にワイルドカードを使用する場合は、ビルド プロセスでワイルドカードの展開が実行されるタイミングに注意してください。 前の例では、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
ターゲットのカスタム バージョンを定義します。 「ビルドのカスタマイズ」を参照してください。