空のフォルダを含む事前コンパイル済みのサイトをコピー/ジップ(プレコンパイル後)に作成しようとしています。空のフォルダは、CreateItemタスクの後にアイテムのリストに含まれていないように見えます。 空のフォルダはどうやって管理できますか?MSBuild:Zip/Copyタスク経由で空のフォルダを追加/コピーする
おかげ
空のフォルダを含む事前コンパイル済みのサイトをコピー/ジップ(プレコンパイル後)に作成しようとしています。空のフォルダは、CreateItemタスクの後にアイテムのリストに含まれていないように見えます。 空のフォルダはどうやって管理できますか?MSBuild:Zip/Copyタスク経由で空のフォルダを追加/コピーする
おかげ
私はこれが最もエレガントなソリューションであることを、私たちは、溶液中のフォルダを作成し、前でやっている、と感じることはありませんplaceholder.txtまたは類似のものと呼ばれるテキストファイル、およびビルドに含めるテキストファイルのプロパティを設定します。結果は、不要なファイルを格納するフォルダになります。次に、zipファイルを削除する前にplaceholder.txtファイルを削除します。すべてがビルドスクリプト内にあります。
わかりやすいですが、私たちのシナリオではうまくいきます。
MSBuildはアイテムの作成時に空のフォルダを取得しません。空のフォルダをアイテムに配置したい場合は、タスク(例:MSBuild Extension PackのFindUnderタスク)を使用する必要があります。
サイード・イブラヒムHashimi
のMy Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
ちょうどあなたがRobocopyをを呼び出すには、execタスクを使用することができます空のフォルダをコピーします。空のフォルダを含め、コピーしようとしているツリー全体を反映する引数/ MIRを指定できます。
例:
<Exec Command="robocopy "$(SourceLocation)\" "$(TargetLocation)\" /MIR" IgnoreExitCode="true" />
同様に、あなたは空のフォルダとジッパーを達成するためのコマンドラインインターフェイスを持っている圧縮ユーティリティを呼び出すには、execタスクを使用することができます。
それは少しトリッキーかもしれませんが、私はすべてのファイルとフォルダが共通のルートにある場合、それはうまくいくと思うし、ワイルドカードを使用せずに、そのルートフォルダを圧縮(ちょうど使用して「」):
<PropertyGroup>
<SourcePath>.\path\to\rootFolder</SourcePath>
<FinalZipFileName>.\path\to\destination\myzip.zip</FinalZipFileName>
</PropertyGroup>
<Target Name="MyApplicationZip" >
<Zip ZipFileName="$(FinalZipFileName)" WorkingDirectory="$(SourcePath)" Files="$(SourcePath)\." ZipLevel="9" />
</Target>