2011-12-20 8 views
3

を持つすべてのファイルをコピーします。私はその後、別のディレクトリにそれのすべてをコピー再帰的に私はMSBuildの持つファイルの以下の設定しているのMSBuild

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

を:

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

しかし、私が欲しいものdoはコピー*.jsで、コピーは/yui/*.*です。私がやってみましたことは次のとおりです。

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

しかし、何これが行うこと/yui/ディレクトリを平らにし、直接/WWW/scriptsにYUIのすべてのファイルを入れています。

これを行うより良い方法はありますか?

私は実際にXBuildであり、MSBuildではありませんが、2つの部分はほとんど互換性があります。

+0

'/ yui /'の下にあるファイルが必要ですか? '/ WWW/scripts/yui /'にありますか? –

+0

唯一の違いは、そのディレクトリに '.css'ファイルや画像などのものが入っていて何がないのかということで、YUIファイルに' *。* 'を含めたいのです。 –

+0

2つの別々の行でなければなりません:

答えて

1

更新Ritchさんのコメント(私は二度同じファイルのコピーを避けるために除外を追加):

それは、2つの別々の行すべきではありません:あなたを行う

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

%(RecursiveDir)はワイルドカード部分と一致します。だから、下/ YUI /あなたが持っていた場合:

YUI/fooの/バー/ abc.dll

を次に、yui/**/*は "FOO /バー" として(RecursiveDirを)%を与えるだろう。それはあなたが期待していることですか?そうであれば、これはxbuildで動作するはずです。どのバージョンを使用していますか? (xbuild --help)。

サブディレクトリからもファイルを収集する場合は「**」が使用されます。あなたがしようとしていることが異なる場合は、いくつかのファイルで例を挙げてください。

はこのような何かを試してみてください:

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

これは、それが機能しない理由への洞察を与える必要があります。

+0

さて、私はすでにそれが動作していない理由を知っていた。私はそれを修正する方法が不思議だった。それは2つの行を使用しているようですが行く方法です。 –

+0

ええ、2行を使用し、 'yui'タスクの呼び出しでは、コピータスクに対してSkipUnchangedFiles = trueを設定します。 – radical

+0

いいね!私はそれを行うか、YUIがそのソースに含まれている様々な拡張子をすべて指定します。 –