私はstealを使ってコンパイルしているWebアプリケーションを持っています。そして、プロダクション用に必要なファイルをコピーしたいだけですが、ディレクトリ構造を保持する必要があります。したがって、たとえば、ディレクトリは(production.js/CSSファイルにJS/CSSをコンパイルする)構築のを盗む実行した後、次のようになります。msbuildでコピーするファイルをチェリーピックしてディレクトリ構造を保持するにはどうしたらいいですか?
このうち\WebApp\index.html
\WebApp\app\img\a.png
\WebApp\app\img\b.png
\WebApp\app\js\foo.js
\WebApp\app\js\bar.js
\WebApp\app\css\base.css
\WebApp\app\css\app.css
\WebApp\app\css\widget1.css
\WebApp\app\production.js
\WebApp\app\production.css
\WebApp\steal\steal.js
\WebApp\steal\README.md
\WebApp\steal\build\build.js
、私はに少数の特定のファイルをコピーします同じディレクトリ構造は:
<PropertyGroup>
<WorkingDir>WebApp\</WorkingDir>
<OutputDir>artifacts\staging\www\</OutputDir>
</PropertyGroup>
...
<ItemGroup>
<CopyFiles Remove="@(CopyFiles)" /> <!-- clean existing items -->
<CopyFiles Condition="'$(Configuration)'=='Debug'"
Include="$(WorkingDir)\**\*.*"
Exclude="$(WorkingDir)\**\.svn\**" />
<CopyFiles Condition="'$(Configuration)'=='Release'"
Include="$(WorkingDir)\index.html;$(WorkingDir)\app\img\**\*.*;$(WorkingDir)\app\production.*;$(WorkingDir)\steal\steal.js;"
Exclude="$(WorkingDir)\**\.svn\**" />
</ItemGroup>
<Copy SourceFiles="@(CopyFiles)"
DestinationFolder="@(CopyFiles->'$(OutputDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
問題0:
\artifacts\staging\www\index.html
\artifacts\staging\www\app\img\a.png
\artifacts\staging\www\app\img\b.png
\artifacts\staging\www\app\production.js
\artifacts\staging\www\app\production.css
\artifacts\staging\www\steal\steal.js
は、理想的には私はこのような何かを持っていると思いますfもちろん、ディレクトリ構造は保存されていません。実際には、すべてのファイルをサブディレクトリのない$(OutputDir)
に入れます。 %(RecursiveDir)
は**
の拡張ですが、ほとんどのパスを明示的に指定しているので、実際には有効になりません。
今、私は私がcopy
タスクとitemgroup
Sの束でこれをブルートフォースすることができます知っているが、それはさておき醜いされてから、独自の問題を紹介します。 1つは、誰かがアイテムを追加したい場合、ユニークなアイテムグループ名(このビルドスクリプトは大きく、多くの他のタスクを実行する)を使用する必要があり、いくつかの行がすべて同期していることを確認する必要があるからです。
これよりも良い方法がありますか?
<ItemGroup>
<IndexFiles Include="$(WorkingDir)\index.html" />
<ImgFiles Include="$(WorkingDir)\app\img\**\*.*" />
<AppFiles Include="$(WorkingDir)\app\production.*" />
...
</ItemGroup>
<Copy SourceFiles="@(IndexFiles)"
DestinationFolder="@(IndexFiles->'$(OutputDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(ImgFiles)"
DestinationFolder="@(ImgFiles->'$(OutputDir)\app\img\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(AppFiles)"
DestinationFolder="@(AppFiles->'$(OutputDir)\app\%(RecursiveDir)%(Filename)%(Extension)')" />
....
正しい。"**"を以前の場所に移動すると、RecursiveDirは正しい結果に終わります。ニース警告! – granadaCoder