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

MSBuild-如何复制可能存在或不存在的文件?,msbuild,copy,Msbuild,Copy,在这种情况下,我需要复制MSBuild脚本中的几个特定文件,但它们可能存在,也可能不存在。如果它们不存在,那没关系,那时我就不需要它们了。但是标准的任务如果找不到列表中的每一项,就会抛出一个错误…在复制任务上使用Exists条件 <CreateItem Include="*.xml"> <Output ItemName="ItemsThatNeedToBeCopied" TaskParameter="Include"/> </CreateItem> &l

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

在复制任务上使用Exists条件

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

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

最简单的方法是使用ContinueOnError标志



但是,如果有其他问题,你不会注意到。因此,madgnome的答案中存在的条件会更好。

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

Thanx!我已经忘了这些!:)还值得一提的是,除了使用
%(RootDir)%(Directory)%(Filename)%(Extension)
,还可以简单地使用
%(FullPath)
(请参见)注意,当您在提供
源文件时使用transform时,您需要在
条件下提供完全相同的转换
<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>