摘要:在用NAnt的过程中一直有个问题没弄清,那就是al.exe在NAnt中的用法。我们知道,al的用途是将不同的资源文件(如图标、本地化文件)或程序集模块等连续成一个具有清单(manifest)的.NET程序集(Assembly),但是在NAnt中具体该怎样写build文件来调用al呢?
下面为了说明方便,我先给出一个简单的例子:
file1: Client.cs
using System;
public class Client
{
public static void
Main(string[] args)
{
// make sure two numbers provided
if (args.Length!=2) {
Console.WriteLine("please provide two numbers");
return;
}
// Call Helper.Add() function to make a simple calculate
int x=Convert.ToInt32(args[0]);
int y=Convert.ToInt32(args[1]);
int total=Helper.Add(x, y);
Console.WriteLine("{0} + {1} = {2}.", x, y, total);
}
}
file2: Helper.cs
public class Helper
{
public static int Add(int x, int y)
{
return x+y;
}
}
上面是一个很简单的加法运算的例子,为了用到al.exe,我把客户端调用(Client)和业务逻辑(Helper)分离在两个单独的.cs文件中。传统的.NET SDK编译方法是:
1. 编译Helper.cs
csc /t:module Helper.cs
2. 编译Client.cs
csc /t:module /addmodule: Helper.netmodule Client.cs
3. 连接
al Helper.netmodule Client.netmodule /t:exe /out:HelperDemo.exe /main:Client.Main
这样三步下来就可以使用生成的HelperDemo.exe了。不过上面这些步骤在NAnt中该怎样实现呢?我查看了NAnt安装目录下的文档,其中在(注:这是NAnt中以XML格式抓抓撰写build文档的一种方式)节点下的确有一个节点,可是其中没有给出/main的实现形式,这也就意味着代码根本无法连接成功,因为.NET运行时环境是无法调用没有.entrypoint标记的程序集的。
这个问题的确让我很费脑筋。我想自己可能钻牛角尖了,因为NAnt一定会提供一个非常方便、非常直接的连接机制的。今天上午,当我再次用NAnt撰写build文件时忽然想起了什么——在节点下有一个main属性,它肯定是用来指定程序集的入口点的,而NAnt一定是把al.exe的连接过程包含在csc任务里了,这样反而简化了build流程。对!就试试!
于是我写成了下面的build文件:
<project name="HelperDemoBuild" default="build" >
<property name="file1"......[阅读全文]