MSBuild: добавление / копирование пустых папок с помощью задачи Zip / Copy - PullRequest
6 голосов
/ 24 июня 2009

Я пытаюсь создать копию / заархивировать предварительно скомпилированный сайт, содержащий пустые папки (после предварительной компиляции) Похоже, пустые папки не включены в список элементов после задачи CreateItem. Как я могу заботиться о пустых папках?

спасибо

Ответы [ 4 ]

4 голосов
/ 24 июня 2009

MSBuild не будет подбирать пустые папки при создании элементов. Вам нужно будет использовать задачу (например, задачу FindUnder из MSBuild Extension Pack ), если вы хотите иметь возможность помещать пустые папки в элемент.

Сайед Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

4 голосов
/ 24 июня 2009

Я не чувствую, что это самое элегантное решение, но то, что мы сделали ранее, это создание папки в решении и текстового файла placeholder.txt или чего-то подобного, а также установка свойств текстовый файл для включения в сборку. В результате вы получите папку, в которой вы хотите файл, который вам не нужен. Затем мы удаляем файл placeholder.txt, прежде чем архивировать его, все в скрипте сборки.

Не элегантно, но это подходит для нашего сценария.

1 голос
/ 13 апреля 2011

Для простого копирования пустых папок вы можете использовать задачу exec для вызова RoboCopy. Вы можете указать аргумент / MIR, который будет отражать все дерево, которое вы пытаетесь скопировать, включая пустые папки.

Пример:

<Exec Command="robocopy &quot;$(SourceLocation)\&quot; &quot;$(TargetLocation)\&quot; /MIR" IgnoreExitCode="true" />

Аналогично, вы можете использовать задачу exec для вызова утилиты сжатия, которая имеет интерфейс командной строки для получения zip с пустыми папками.

0 голосов
/ 05 февраля 2016

Это может быть немного сложно, но я думаю, что это работает, если все ваши файлы и папки находятся в общем корне и вы архивируете эту корневую папку без использования подстановочных знаков (просто используя '.'):

<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>
...