Я только что начал играть с MSBuild этим вечером и портирую скрипт сборки nAnt на MSBuild. Компиляция кажется довольно простой, но я хочу запустить Java-программу для каждого файла в каталоге. Я наконец-то начал работать, но это кажется хакерским, и я совершенно уверен, что есть более чистый способ сделать это. Вот мой код:
<!-- Crunch Files -->
<ItemGroup>
<ToCrunch Include="$(BuildDir)/WWW/Scripts/kpc*.js;$(BuildDir)/WWW/Styles/*.css" />
</ItemGroup>
<ConvertToAbsolutePath Paths="@(ToCrunch)">
<Output TaskParameter="AbsolutePaths" ItemName="AbsoluteFiles" />
</ConvertToAbsolutePath>
<Message Text="Crunching Script Files..." />
<Exec WorkingDirectory="Crunch" Command="Java.exe -jar yuicompressor-2.4.2.jar %(AbsoluteFiles.Identity) -o %(AbsoluteFiles.Identity) --charset utf-8" />
Вот мои проблемы с вышеуказанным подходом:
Мне нужно установить рабочий каталог на Crunch , где живет java.exe, ДАЖЕ, ЧЕМ Java.exe находится в системном пути и должен работать.
Поскольку я меняю рабочий каталог, включенные файлы в ItemGroup больше не относятся к рабочему каталогу, поэтому теперь мне нужно преобразовать их все в их абсолютные пути.
Эта программа очень медленная и занимает несколько секунд на файл. Итак, что я получаю, это "Crunching files script" и затем 20-секундная задержка или около того. Я хотел бы вывести на экран сообщение для каждого обрабатываемого файла.
Вот то же самое в nAnt:
<!-- Crunch Javascript/CSS Files -->
<foreach item="File" property="filename">
<in>
<items>
<include name="${build.dir}/WWW/Scripts/kpc*.js" />
<include name="${build.dir}/WWW/Styles/*.css" />
</items>
</in>
<do>
<echo message="Crunching File ${filename}" />
<exec program="Crunch/java">
<arg value="-jar" />
<arg value="Crunch/yuicompressor-2.4.2.jar" />
<arg file="${filename}" />
<arg value="-o" />
<arg file="${filename}" />
<arg line="--charset utf-8" />
</exec>
</do>
</foreach>
Если у кого-то есть какие-либо способы исправить любую из вышеперечисленных проблем, я был бы очень признателен. Спасибо!