NAnt MSBuild 和 NANT (zz)

liuxue.gu@hotmail.com · 2008年06月18日 · 2 次阅读

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

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

  1. 构建程序
  2. 可以自动根据文件时间,来进行递增构建。
  3. 可以扩充,以完成比较负责的任务。
  4. 一般是通过 XML 来描述构建过程。
  5. 一般包含 Property 、Target 以及 Target 之间的依赖关系,以构成一个构建序列。
  6. 可以指定运行的 Target,干不同的事情。
  7. 功能强大,并不是只有用来构建程序,还可以比较夸张的说可以干任何需要重复执行的自动化工作。

我的目录下一般分 src 和 debug 两个目录,src 顾名思义包含源文件,debug 包含输出的文件。

以前的 Nant 文件的内容是:

而新建的 MSBuild 文件内容为:

<Project DefaultTargets = "Compile"

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

debug

src

g

<MakeDir Directories = "$(BuildDir)"

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

<CSC

Sources="@(CSFile)"

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

<Output TaskParameter = "OutputAssembly"

ItemName = "EXEFile" />

可以看到,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,没有了代码自动提示,没有了花哨的界面,只有代码。感觉真是不同.

[url]http://hi.baidu.com/pleasure8/blog/item/0d655c0e4dea91cb7bcbe106.html/url][

暂无回复。
需要 登录 后方可回复。