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

Vil*_*lx- 26 msbuild copy

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

Jul*_*rau 44

使用复制任务中的存在条件.

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

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

  • 还值得一提的是,可以简单地使用`%(FullPath)`来代替`%(RootDir)%(目录)%(文件名)%(扩展名)`(参见http://msdn.microsoft.com/en -us /库/ ms171476.aspx) (8认同)

Kee*_*ijk 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>
Run Code Online (Sandbox Code Playgroud)

但如果出现其他问题,你就不会注意到它.因此,madgnome的回答会更好.