3

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

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

然后我将所有内容复制到另一个目录:

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

但是,我想做的是 copy*.js和 copy /yui/*.*。我尝试做的是:

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

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

有一个更好的方法吗?

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

4

2 回答 2

3

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

yui/foo/bar/abc.dll

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

当您还想从子目录中收集文件时,使用“**”。如果您尝试做的事情不同,那么您能否举一个文件很少的例子?

尝试这样的事情:

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

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

于 2011-12-20T13:22:26.180 回答
1

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

那不应该是两条单独的线:

<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="..." />
于 2011-12-21T08:13:39.470 回答