【问题标题】:Recursively copy all files with MSBuild使用 MSBuild 递归复制所有文件
【发布时间】:2011-12-20 00:03:22
【问题描述】:

我有以下一组带有 MSBuild 的文件:

<ScriptFiles Include="Server/scripts/**/*.js" />

然后我将其全部复制到另一个目录:

<Copy SourceFiles="@(ScriptFiles)" DestinationFiles="@(ScriptFiles->'$(BuildDir)/WWW/scripts/%(RecursiveDir)%(Filename)%(Extension)')" />

但是,我想做的是复制*.js,然后复制/yui/*.*。我尝试做的是:

<ScriptFiles Include="Server/scripts/**/*.js;Server/scripts/yui/**/*" />

但是,这样做的目的是将/yui/ 目录展平,并将yui 的所有文件直接放入/WWW/scripts

有没有更好的方法来做到这一点?

顺便说一句,我实际上使用的是XBuild 而不是MSBuild,但据我所知,这两者在很大程度上是兼容的。

【问题讨论】:

  • 您希望/yui/ 下的文件去哪里?在/WWW/scripts/yui/下?
  • 是的!唯一的区别是我想为 YUI 文件包含 *.*,因为该目录包含诸如 .css 文件和图像之类的东西,什么不是..
  • 不应该是两行:
  • 是的,我可以使用两个单独的行,但不会将所有文件复制两次吗? YUI 目录非常大。

标签: .net msbuild xbuild


【解决方案1】:

%(RecursiveDir) 将匹配通配符部分。所以,如果在 /yui/ 你有:

yui/foo/bar/abc.dll

然后,yui/**/* 会将 %(RecursiveDir) 作为“foo/bar”。这是你所期待的吗?如果是,那么这应该适用于 xbuild。您使用的是哪个版本? (xbuild --help)。

"**" 也用于从子目录中收集文件。如果您尝试做的事情有所不同,那么您能否举一个文件很少的示例?

试试这样的:

<Message Text="ScriptFile: %(ScriptFile.Identity) , RD: %(ScriptFile.RecursiveDir)"/>
<Message Text="Paths: @(ScriptFiles->'$(BuildDir)/WWW/scripts/%(RecursiveDir)%(Filename)%(Extension)')"/>

这应该可以深入了解它为什么不起作用。

【讨论】:

  • 是的,我已经知道它为什么不起作用了。我想知道如何解决它。似乎使用两条线是要走的路。
  • 是的,然后使用两行并为“yui”任务调用设置 SkipUnchangedFiles=true 为 Copy 任务。
  • 听起来不错!我要么这样做,要么指定 YUI 在其源代码中包含的所有各种扩展。
  • @Mike 您可以在复制之前使用RemoveDuplicates Task 过滤您的ScriptFiles 集合。
  • @Mike Oups - 看起来 RemoveDuplicates 也删除了所有 RecursiveDir 信息:-(
【解决方案2】:

更新了 Ritch 的评论(我添加了 Exclude 以避免复制相同的文件两次):

那不应该是两行吗:

<ScriptFiles Include="Server/scripts/**/*.js" Exclude="Server/scripts/yui/**/*"/> 
<YuiFiles Include="Server/scripts/yui/**/*" />

<YuiFiles Include="Server/scripts/yui/**/*" />
<ScriptFiles Include="Server/scripts/**/*.js" Exclude="@(YuiFiles)"/> 

<Copy SourceFiles="@(YuiFiles)" DestinationFiles="..." />    
<Copy SourceFiles="@(ScriptFiles)" DestinationFiles="..." />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多