我有以下一组带有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
,但从我所看到的情况来看,这两者大部分都是兼容的。
答案 0 :(得分:3)
%(RecursiveDir)将匹配通配符部分。所以,如果在/ yui /你有:
衣/富/酒吧/ 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)')"/>
这应该可以深入了解它无法正常工作的原因。
答案 1 :(得分:1)
更新了Ritch的评论(我添加了Exclude以避免两次复制相同的文件):
不应该是两个单独的行:
<ScriptFiles Include="Server/scripts/**/*.js" Exclude="Server/scripts/yui/**/*"/>
<YuiFiles Include="Server/scripts/yui/**/*" />
OR
<YuiFiles Include="Server/scripts/yui/**/*" />
<ScriptFiles Include="Server/scripts/**/*.js" Exclude="@(YuiFiles)"/>
<Copy SourceFiles="@(YuiFiles)" DestinationFiles="..." />
<Copy SourceFiles="@(ScriptFiles)" DestinationFiles="..." />