Рекурсивно копировать все файлы с MSBuild - PullRequest
3 голосов
/ 20 декабря 2011

У меня есть следующий набор файлов с 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, но из того, что я видел, они по большей части совместимы.

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

% (RecursiveDir) будет соответствовать части шаблона. Итак, если под / yui / у вас было:

юй / Foo / бар / 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 голос
/ 21 декабря 2011

Обновлен комментарий Ритча (я добавил «Исключить», чтобы не копировать одни и те же файлы дважды):

Разве это не должны быть две отдельные строки:

<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="..." />
...