我剛剛開始在MSBuild中玩耍,並且正在將一個nAnt構建腳本移植到MSBuild。編譯看起來非常簡單,但我想要做的一件事是針對目錄中的每個文件運行一個Java程序。我終於找到了工作,但看起來很詭異,我確信有一個更簡潔的方法可以做到這一點。這裏是我的代碼: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" />
這裏是我的上述做法的問題:
我要工作目錄設置爲緊縮其中java.exe的生活,即使JAVA.EXE是系統路徑並應該正常工作。
因爲我改變了工作目錄,ItemGroup中包含的文件不再相對於工作目錄,所以現在我必須將它們全部轉換爲它們的絕對路徑。
該程序非常慢,每個文件需要幾秒鐘。所以我得到的是「搗毀腳本文件」,然後延遲20秒左右。我想輸出一個消息到屏幕上,而不是每個正在處理的文件。
下面是同樣的事情在南特:
<!-- 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>
如果任何人有任何的方式來解決所有的上述問題,我會非常感激。謝謝!
好的,我找到了一種解決絕對路徑的方法。我可以使用%(ToCrunch.FullPath)而不是.Identity,然後我不必轉換所有路徑。因此,一個問題無論如何.. –