28

MSBuildスクリプトでいくつかの特定のファイルをコピーする必要がある状況がありますが、それらは存在する場合と存在しない場合があります。それらが存在しない場合は問題ありませんが、その場合は必要ありません。<copy>ただし、リスト内のすべてのアイテムが見つからない場合、標準タスクはエラーをスローします...

4

3 に答える 3

50

コピー タスクでExists条件を使用します。

<CreateItem Include="*.xml">
  <Output ItemName="ItemsThatNeedToBeCopied" TaskParameter="Include"/>
</CreateItem>

<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
      DestinationFolder="$(OutputDir)"
      Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>
于 2009-02-04T15:38:50.137 に答える
7

最も簡単なのは、ContinueOnError フラグを使用することですhttp://msdn.microsoft.com/en-us/library/7z253716.aspx

<Project xmlns="http://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"
            ContinueOnError="true"
        />
    </Target>

</Project>

しかし、他の何かが間違っている場合、あなたはそれに気付かないでしょう。したがって、madgnome の回答からの条件が存在する方がよいでしょう。

于 2009-02-04T15:50:29.397 に答える