MSBuild - 如何复制可能存在或不存在的文件?

时间:2009-02-04 15:27:06

标签: msbuild copy

我有一种情况需要在MSBuild脚本中复制一些特定文件,但它们可能存在也可能不存在。如果它们不存在就没关系,那我就不需要了。但是,如果标准<copy>任务找不到列表中的每个项目,则会抛出错误...

3 个答案:

答案 0 :(得分:43)

在复制任务中使用存在条件。

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

<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
      DestinationFolder="$(OutputDir)"
      Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>

答案 1 :(得分: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的回答会更好。

答案 2 :(得分:0)

看起来您可以将MySourceFiles标记为SkipUnchangedFiles =“true”,如果文件已存在,则不会复制这些文件。