我有一个情况,需要在MSBuild脚本中复制一些特定文件,但是这些文件可能存在也可能不存在。如果它们不存在,那么没关系,我就不需要它们了。但是标准的<copy>
任务如果在列表中找不到每个项目,则会报错...
在复制任务中使用Exists条件。
<CreateItem Include="*.xml">
<Output ItemName="ItemsThatNeedToBeCopied" TaskParameter="Include"/>
</CreateItem>
<Copy SourceFiles="@(ItemsThatNeedToBeCopied)"
DestinationFolder="$(OutputDir)"
Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')"/>
最简单的方法是使用 ContinueOnError 标志 http://msdn.microsoft.com/zh-cn/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的回答中提到的条件会更好。
看起来您可以将MySourceFiles标记为SkipUnchangedFiles =“true”,如果文件已经存在,则不会复制文件。
%(FullPath)
д»Јжӣҝ%(RootDir)%(Directory)%(Filename)%(Extension)
пјҲиҜ·еҸӮи§Ғhttp://msdn.microsoft.com/en-us/library/ms171476.aspxпјүгҖӮ - AASoft