使用 NAnt 构建 asp.net 项目并生成一个固定名字的动态库

在 Java 项目里多用 Ant 来自动构建项目,随着惯性思维,很容易就找到了 .Net 里也有类似的构建工具 NAnt。最该死的是连 Maven 在 .net 中的对应产物 NMaven 也都有了,http://sourceforge.net/projects/nmaven/。从 Ant 到 NAnt 自然会有一种驾轻就熟的感觉。其实 MS 也为我们提供了相应的构建工具,如早先的 nmake 和现在的 MSBuild,它们各自用特定的构建文件,只是纯粹的项目构建工具。

NAnt 能让你完成许多的系统操作,并且是扩展的,它能独立的完成诸如取版本、编译、打包、发布、Email 通知等一系列过程。如果再让 NAnt 结合 MSBuild 便能制作出完全自动化,一劳永逸,简单化的构建方案。比如这里的例子讲述了如何用 NAnt 构建一个 WebSite 项目,并把生成的多个动态库,像:App_Web_j_5i4fnt.dll、App_Code.dll、App_global.asax.dll 用 aspnet_merge.exe 命令合成为一个固定名字的动态库,如 Unmi.Web.dll。这样非常有利于站点的部分更新。

关于把动态库合并为一个固定名字的文件,本人在 VS2008 发布网站时如何产生固定命名的 Dll 文件 是用另一种方法实现的,需要下载安装 WebDeploymentSetup.msi,比起 NAnt 的办法个人觉得略显麻烦,而且不够灵活。

本例环境:VS2008 下的 WebSite 项目,安装 VS2008 时注意选项,因为要用到它提供的 aspnet_merge.exe 命令,通过 Windows SDK 更新也能获得它。
NAnt 可从 http://nant.sourceforge.net 下载,解压后设定 PATH 环境变量指向到它的 bin 目录。

具体步骤如下:

1. 在 NAnt 的 bin/ 目录下新建一个 NAnt.bat,内容为:

@echo off
nant -buildfile:%1
pause

这样方便于在 Visual Studio 中双击执行自动构建,能直接用构建文件作为执行参数。并且在构建完成后不立即关闭命令窗口,可让您看到构建的结果,成功或失败,失败的原因。

2. 更新方案文件中的目标目录,例如我们要生成的目录文件在 d:\target,那么打开方案文件,假定是 C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\WebSite1\WebSite1.sln,把以下两行:

Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\FNPro\"
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\FNPro\"

更改为:

Debug.AspNetCompiler.TargetPath  = "d:\target"
Release.AspNetCompiler.TargetPath  = "d:\target"


其实也可不去改方案文件的目标目录,只需在 MSBuild 命令中用属性参数来覆盖掉方案的配置,例如下面的    <exec program="${msbuild.exe}"   commandline='${Solution} /p:Configuration=${Configuration}' /> 

加个 OutDir 配置来指定构建的输出目录
<exec program="${msbuild.exe}"   commandline='${Solution} /p:Configuration=${Configuration};OutDir=${build.dir}\' />

构建后你会发现,生成要发布的文件并非在 d:\target 目录中,而是 d:\target\_PublishedWebsites 目录中。目前暂没找到办法控制文件生成在 d:\target,所以后续的操作也要改动到 d:\target\_PublishedWebsites  目录中去。

 

3. 建立构建文件,如我们在项目目录下建立 Project.build,内容为:

这是一个 xml 文件,可以在 Visual Studio 中用 XML Editor 来编辑它。几点说明:

1. 其中指定最终生成的动态库的文件名,以及动态库的版本信息。用临时的 AssemblyInfo.cs 及编译的 AssemblyInfo.dll 来设置版本信息的。
2. 构建目录要与前面方案文件中的 Debug.AspNetCompiler.PhysicalPath/Release.AspNetCompiler.PhysicalPath 一样,都是 d:\target
3. 最后构建完成后,为发布方便会自动用资源管理器打开构建目录的窗口。

你可以更深入的探究 NAnt 来自动完成单元测试、发布、或打包,进行 IIS 的操作,发邮件给相关人等操作。

4. 执行构建

两种方法

1) 可以直接在控制台下执行 nant 命令,cd 到 Project.build 目录,执行 nant -buildfile:Project.build,或者 nant.bat Project.build。

2) 在 Visual Stuio 中,右键点击 Project.build,打开 Open With 窗口,Add..,选上 NAnt.bat,并 Set As Default。这样以后每次构建只要双击那个 Project.build 即可完成。

对于 NAnt 结合 MSBuild 的使用还可以进一步发掘,在 NAnt 的 bin\extensions\common\2.0\ 目录中有个 NAnt.MSBuild.dll 文件,应该可以此来简化上面的构建文件。

参考:1. ASP.NET 合并工具 (Aspnet_merge.exe)
2. Managing ASP.NET Precompiled Output for Deployment Using the aspnet_merge.exe Command
3. NAnt与MSBuild使用(一)
4. NAnt Task Reference

类别: .Net. 标签: , . 阅读(391). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz