タスクを削除する

指定されたファイルを削除します。

パラメーター

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>

削除されたファイルを追跡する必要がある場合は、次のように、項目名を使用して TaskParameterDeletedFiles に設定します。

      <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 &quot;@(FileToDelete)&quot;"/>
</Target>

一般に、ビルド スクリプトを作成するときは、削除が論理的に Clean 操作の一部であるかどうかを考慮します。 通常の Clean 操作の一部としてクリーニングするファイルを設定する必要がある場合は、それらを @(FileWrites) リストに追加すると、次の Clean で削除されます。 さらにカスタム処理が必要な場合は、ターゲットを定義し、属性 BeforeTargets="Clean" または AfterTargets="Clean" を設定して実行するように指定するか、BeforeClean または AfterClean ターゲットのカスタム バージョンを定義します。 「ビルドのカスタマイズ」を参照してください。

関連項目