MSBuild和NANT2006

MSBuild和NANT2006-11-14 15:51昨天,把微软的MSBuild研究了一下。其实.Net平台上的Make工具,已经有了NAnt。但是MSBuild作为官方发布的工具,VS2005对于它有很好的环境支持。

这些Ant类的工具,具有一下特点:


构建程序
可以自动根据文件时间,来进行递增构建。
可以扩充,以完成比较负责的任务。
一般是通过XML来描述构建过程。
一般包含Property 、Target以及Target之间的依赖关系,以构成一个构建序列。
可以指定运行的Target,干不同的事情。
功能强大,并不是只有用来构建程序,还可以比较夸张的说可以干任何需要重复执行的自动化工作。
我的目录下一般分src和debug两个目录,src顾名思义包含源文件,debug包含输出的文件。

以前的Nant文件的内容是:

<project name="g" default="compile" basedir=".">

<property name="build.dir" value="debug"/>

<property name="src.dir" value="src"/>

<property name="target" value="g.exe"/>

<target name="init">

<mkdir dir="${build.dir}"/>

<mkdir dir="${src.dir}"/>

</target>



<target name="compile" depends="init">

<csc target="exe" output="${build.dir}\${target}">

<sources>

<include name="${src.dir}\**\*.cs" />

</sources>

</csc>

</target>



<target name="run" depends="compile">

<exec program="${build.dir}\${target}" />

</target>



<target name="clean">

<delete dir="${build.dir}"/>

</target>

</project>



而新建的MSBuild文件内容为:

<Project DefaultTargets = "Compile"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

<PropertyGroup>

<BuildDir>debug</BuildDir>

<SourceDir>src</SourceDir>

<TargetExe>g</TargetExe>

</PropertyGroup>



<Target Name="MakeBuildDir">

<MakeDir Directories = "$(BuildDir)"

Condition = "!Exists('$(BuildDir)')" />

</Target>



<ItemGroup>

<CSFile Include="$(SourceDir)\*.cs" />

</ItemGroup>



<Target Name="Compile" Inputs="@(CSFile)" Outputs="\$(BuildDir)\$(TargetExe).exe" DependsOnTargets="MakeBuildDir">

<CSC

Sources="@(CSFile)"

OutputAssembly = "$(BuildDir)\$(TargetExe).exe">

<Output TaskParameter = "OutputAssembly"

ItemName = "EXEFile" />

</CSC>

</Target>



<Target Name="Run" DependsOnTargets="Compile">

<Exec Command="$(BuildDir)\$(TargetExe).exe"/>

</Target>



<Target Name="Clean">

<Delete Files="\$(BuildDir)\$(TargetExe).exe" Condition="Exists('$(BuildDir)\$(TargetExe).exe')"/>

</Target>

</Project>



可以看到,MSBuild引入的是ItemGroup和PropertyGroup两个概念,不同于NAnt的用${属性}引用,他的里面:


$(Property名)来表示引用PropertyGroup里面的内容
@(Item名)来引用ItemGroup里面的内容
ItemGroup和PropertyGroup不同之处在于是否可以元素是否可以出现多次,ItemGroup可以,Property则不可以。

其他的不同之处在于递增构建的支持,在MSBuild里面必须明确指出。如上面的CSC里面必须指定Inputs和Outputs,否则MSBuild不是递增构建。而NAant则默认都是递增构建,即只编译比较新的源文件。

其他的都支持条件格式。NAant还支持内部的C#语句,发现就会自动编译。

MSBuild还支持一些其他的Task,都是.Net平台上面的东西,如Mainfest、SNK等,对于.Net的编译显的比较专业。



自动构建确实是一个好东西。他让你远离IDE,没有了代码自动提示,没有了花哨的界面,只有代码。感觉真是不同。

你可能感兴趣的:(c,.net,xml,ant,ide)