Copy タスク
ファイル システム上のファイルを、新しい場所にコピーします。
パラメーター
Copy タスクのパラメーターの説明を次の表に示します。
パラメーター |
Description |
---|---|
CopiedFiles |
省略可能な ITaskItem[] 型の出力パラメーター。 正常にコピーされたアイテムが格納されます。 |
DestinationFiles |
省略可能な ITaskItem[] 型の出力パラメーター。 ソース ファイルのコピー先ファイルの一覧を指定します。この一覧のファイルは、SourceFiles パラメーターに指定した一覧の内容と 1 対 1 で対応している必要があります。つまり、SourceFiles の最初のファイルは、DestinationFiles の最初の場所にコピーされ、2 番目以降のファイルも同様に処理されます。 |
DestinationFolder |
省略可能な ITaskItem 型のパラメーターです。 ファイルのコピー先ディレクトリを指定します。ファイルではなく、ディレクトリである必要があります。ディレクトリが存在しない場合は、自動的に作成されます。 |
OverwriteReadOnlyFiles |
省略可能な Boolean 型のパラメーターです。 ファイルが読み取り専用としてマークされている場合でも、ファイルを上書きします。 |
Retries |
省略可能な Int32 型のパラメーターです。 コピーに失敗した場合の再試行回数を指定します。既定値はゼロです。 メモ: 再試行を行った場合、ビルド処理で同期の問題が生じる可能性があるので注意してください。 |
RetryDelayMilliseconds |
省略可能な Int32 型のパラメーターです。 再試行の間隔を指定します。既定値は RetryDelayMillisecondsDefault 引数であり、これが CopyTask コンストラクターに渡されます。 |
SkipUnchangedFiles |
省略可能な Boolean 型のパラメーターです。 true に設定すると、コピー元のファイルとコピー先のファイルで変更がない場合、コピー処理がスキップされます。Copy タスクでは、ファイルのサイズが等しく、最終更新時刻が等しい場合、ファイルは変更されていないと見なされます。
メモ
このパラメーターに true を設定した場合は、コピー先のファイルに対して依存関係分析を行わないでください。この設定を行った場合には、ソース ファイルの最終更新時刻が、コピー先のファイルの最終更新時刻よりも新しい場合にだけ、タスクが実行されるためです。
|
SourceFiles |
必須の ITaskItem[] 型のパラメーターです。 コピー元となるファイルを指定します。 |
UseHardlinksIfPossible |
省略可能な Boolean 型のパラメーターです。 true の場合、ファイルがコピーされるのではなく、コピーされたファイルのハード リンクが作成されます。 |
解説
DestinationFolder パラメーターか DestinationFiles パラメーターのいずれかを指定する必要がありますが、両方は指定できません。両方を指定した場合、タスクは失敗し、エラーがログに記録されます。
上記のパラメーター以外に、このタスクは TaskExtension クラスからパラメーターを継承します。このクラス自体は、Task クラスから継承されます。これらの追加のパラメーターの一覧とその説明については、「TaskExtension 基本クラス」を参照してください。
使用例
MySourceFiles アイテム コレクション内のアイテムを C:\MyProject\Destination にコピーする例を次に示します。
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MySourceFiles Include="a.cs;b.cs;c.cs"/>
</ItemGroup>
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="c:\MyProject\Destination"
/>
</Target>
</Project>
再帰的なコピーを行う方法を次の例に示します。このプロジェクトでは、C:\MySourceTree から C:\MyDestinationTree に、ディレクトリ構造を維持しながら、すべてのファイルが再帰的にコピーされます。
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MySourceFiles Include="c:\MySourceTree\**\*.*"/>
</ItemGroup>
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFiles="@(MySourceFiles->'c:\MyDestinationTree\%(RecursiveDir)%(Filename)%(Extension)')"
/>
</Target>
</Project>