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,没有了代码自动提示,没有了花哨的界面,只有代码。感觉真是不同。
分享到:
相关推荐
学习NAnt小Demo_Build CS+Solution+MSBuild+SVN+NUnit+NUnitReport
遗憾的是,NAnt 缺少漂亮的图形界面,但它的确具有可以指定应该在生成过程中完成哪些任务的控制台应用程序和 XML 文件。注意,MSBuild(属于 Visual Studio 2010 的新的生成平台)为每种健壮的生成方案进行了准备,...
遗憾的是,NAnt 缺少漂亮的图形界面,但它的确具有可以指定应该在生成过程中完成哪些任务的控制台应用程序和 XML 文件。注意,MSBuild(属于 Visual Studio 2005 的新的生成平台)为每种健壮的生成方案进行了准备,...
遗憾的是,NAnt 缺少漂亮的图形界面,但它的确具有可以指定应该在生成过程中完成哪些任务的控制台应用程序和 XML 文件。注意,MSBuild(属于 Visual Studio 2005 的新的生成平台)为每种健壮的生成方案进行了准备,...
遗憾的是,NAnt 缺少漂亮的图形界面,但它的确具有可以指定应该在生成过程中完成哪些任务的控制台应用程序和 XML 文件。注意,MSBuild(属于 Visual Studio 2008 的新的生成平台)为每种健壮的生成方案进行了准备,...
我们的目标是使开发人员停止使用PowerShell,MSBuild,NAnt和其他脚本框架。 通过Bounce,您可以更轻松地以一致的方式利用.NET堆栈,共享代码,利用第三方库以及为任务构建测试。快来了全库弃用启动版本0.11.0时,...
关于每日构建,在园里有已经有很多的文章了,特别是摩诘的《在.NET环境中实现每日构建(DailyBuild)--NAnt篇》更是从概念上和实践上手把手地介绍如果在.NET环境下实现每日构建。但很遗憾,在我实现每日构建之前没有...
This is a library of Ant tasks that help ... It includes the "old" .NET tasks like a C# compiler task but also comes with support for NUnit testing or running the popular NAnt or MSBuild build tools.
Arundo是一个基于Soha Navigator的轻量级连续构建集成系统(请参见sourceforge),该系统可以在SVN提交时自动执行NAnt,MsBuild脚本。