3

私は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つはほとんどの部分で互換性があります。

4

2 に答える 2

3

%(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)')"/>

これにより、なぜ機能しないのかについての洞察が得られるはずです。

于 2011-12-20T13:22:26.180 に答える
1

Ritchのコメントを更新しました(同じファイルを2回コピーしないように、Excludeを追加しました):

それは2つの別々の行であってはなりません:

<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 に答える