一星期8天

Eight Days a Week - by The Beatles & 小陆

完全命令行.NET开发

很久没写日记了,今天走一个

Windows系统的GUI太好用了,以至于很多Windows开发者都不知道还有更好用的命令行模式。命令行模式可以把自己经常使用的功能写成脚本,一个命令就可以全部工作执行掉,实在是广大程序员同志的福音啊。

NAnt

Java的开发者都知道Ant,但是.net的开发人员却很少有使用NAnt的。大部分程序员同志都习惯了按下F7,然后把生成物复制到部署文件夹下面,注册dll,修改配置文件,建立数据库、数据表、初始化数据,启动服务。很好,但是千万不要忘了某些步骤,否则早上用户来上班,打开电脑,出现一堆ERROR,运维的电话会被打爆的。

用NAnt吧,编译、测试、部署、服务恢复都可以用一个脚本解决。这里是NAnt主页,下载包里面有Samples可以看,还有帮助文档。NAnt集成了大部分.NET开发的命令:编译、复制、NUnit测试,还可以用<exec> Tag执行系统命令,用这个Tag可以执行诸如“net start”之类的命令,方便的重启Windows服务。这样一来,除了代码要自己写,剩下的工作一个NAnt脚本完成,开发人员,你们有福了。

运维人员也不用担心系统部署了,不再需要在文档堆中挣扎,不小心忘记注册了某个dll,或者缺少了一个sql脚本。看看NAnt脚本吧,一切都在那里,一个脚本胜过千言万语。

写一个NAnt脚本吧,写一次需要一天,写完了可以用一年。

SDK命令

NAnt尽管提供了很多编译命令,但是项目更新速度实在是…….NET的开源项目比起Java来就是差远了啊。比如最新的NAnt,竟然不能编译Visual Studio 2005的solution。不要紧,我们可以使用万能的<exec> Tag。Visual Studio和.NET Framework SDK都是提供了很多命令行工具的,比如下面的命令,就可以对solution进行编译,并且把编译过程记录在build.log日志里:

devenv HelloWorld.sln /Build Debug /Out build.log

正常情况下,devenv程序应该在你的机器上这个位置:%ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE,运行“devenv /?”可以得到帮助,这里有命令的说明:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vsintro7/html/vxgrfCommandLineSwitches.asp

有了这些命令,再用NAnt集成起来,可以减少很多手工的工作。比如我们需要使用xsd命令生成cs代码,再复制到指定的文件夹,编译成dll,然后依赖这个dll编译新的项目,这一系列行为都可以集成在一个NAnt文件里,一键OK。

其他程序的命令行模式

MS提供的很多程序实际上都是具有命令行模式的,比如Sql Server的客户端工具,就提供了sqlcmd命令行工具,下面的命令就可以连接到mydb数据库,并且在数据库上执行ct.sql脚本:

sqlcmd -S131.30.20.15 -Uuid -Ppwd -dmydb -ict.sql

有了这个工具,就可以在NAnt脚本里写一个install段,把安装数据库、建立数据表、初始化数据等等一切的工作都写在里面,随系统安装一起执行。

如果已经安装了Sql Server 2005 Native Client,可以打开命令行窗口,运行“sqlcmd /? ”看到命令的帮助,对于Sql Server 2000的客户端,MS也提供了isql命令实现同样的功能,命令参数也差不多。

MS为一些应用程序提供了VBScript控制方式,比如这个脚本:RestartBizTalkHostInstances.vbs,他可以重新启动BizTalk服务所有的宿主进程,每次更新部署一个BizTalk业务流程之后需要进行这个操作,新的流程才能启用。可以在命令行中这样运行VB脚本:

cscript /NoLogo RestartBizTalkHostInstances.vbs

这样的脚本在MS随软件发布的SDK和Sample中有很多,这个脚本就是来自BizTalk的SDK。

加强Windows的命令行

Windows本身提供的命令行工具非常弱,至少比起Unix/Linux平台差远了啊。于是有一些工具对他进行了补充,最简单的方式,他们把一些Unix/Linux下面的命令移植到Windows上面来了,比如UnxUtils项目,把这个东西下载解压,设置一下PATH环境变量,就可以使用Linux下面最常用的一些命令。比如下面的命令就能看到当前目录下所有包含“CPMIS”字符串的文件:

grep CPMIS *

下面的命令可以遍历下级目录,找到全文中同时含有“CPMIS”和“Info”的文件:

grep -r CPMIS * | grep Info

UnxUtils还收入了ls、cp、rm、tail、tar、gzip、sed、diff等一些Unix家常工具,如果你要进行日志分析,或者需要修改上千个文件名,再进行压缩打包备份,这些工具会大大的帮助你。

另外还有一个东东叫做Cygwin,他是Windows平台上的Linux模拟器,他提供了一个模拟环境,和一些命令工具,使用起来一切都和Linux平台一样。

有了这些东西,再加上一个VIM,这是一个纯命令行的文本编辑工具,我相信我们迟早能打造一个纯命令行的开发环境,告别蓝色白色红色的窗口(如果有这个必要的话,如果真有这个必要的话)。

posted on 2008-04-01 14:22 小陆 阅读(2689) 评论(15)  编辑 收藏 所属分类: 开发技术

评论

#1楼  2008-04-01 14:45 rexzhou [未注册用户]

参见MSBuild工具。其中的脚本不输给NAnt,而且Vs2005,2008的项目文件都符合MSBuild的要求   回复  引用    

#2楼  2008-04-01 15:21 xjb      

同意楼上的手法,msbuild就很不错   回复  引用  查看    

#3楼  2008-04-01 15:41 jillzhang      

nant应该是vs2003时代的   回复  引用  查看    

#4楼  2008-04-01 16:22 A.Z! [未注册用户]

lz真的很搞笑哦,看样子是没有用过powershell.
  回复  引用    

#5楼 [楼主] 2008-04-01 16:41 小陆      

@A.Z!
我是最近才知道power shell,据说Windows server 2008默认安装这个东西。
我以前在unix平台做事情习惯了,后来经常需要使用图形界面,用鼠标在菜单上找来找去,经常做的事情总是要重复,有点不适应,于是就在我的2003 server上装了很多command line工具,学会了写bat脚本,把Windows搞得跟linux似的,还打开了ftp和telnet服务,可以远程登录进行操作,图形终端服务基本不用了,工作效率更高一些。
msbuild也是很不错的,但是对于搞惯了Java的人来说,有些不够亲切 :)nant据传已经停止维护了,最新的vs他已经不能支持了,真是可惜。在.net平台上搞开源项目真难,不打上ms的标签,大家就不爱用他。   回复  引用  查看    

#6楼  2008-04-01 16:50 戏水      

@ 设置一下PATH环境变量
请问怎么设置?   回复  引用  查看    

#7楼 [楼主] 2008-04-01 17:02 小陆      

@戏水
打开注册表,这个位置:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment

或者到控制面板——系统——高级——环境变量   回复  引用  查看    

#8楼  2008-04-01 17:07 狼Robot      

看来lz是个牛人.   回复  引用  查看    

#9楼  2008-04-01 17:15 Cure      

感觉有些东西可以用bat直接搞定   回复  引用  查看    

#10楼 [楼主] 2008-04-01 17:22 小陆      

@Cure
bat也是基本可以搞定的,但是使用bat,很多依赖控制就需要自己实现,是很麻烦的。比如build的时候,我们需要比较源和目标的时间戳,如果目标是最新的,这时是不需要编译的。install、deploy都会依赖build,先检查build产物是不是最新的,如果build失败,脚本会终止,下面的所有工作都不需要执行。使用bat自己写这些东西是很麻烦的。nant和msbuild就是帮助我们做这个工作的。   回复  引用  查看    

#11楼  2008-04-01 18:12 Mainz      

偶也是曾经从unix那边转过来的,习惯了grep awk的强大,

一下子转到window的时候的确感觉很菜!

没用过PowerShell,不过我感觉不可能有grep awk强大

顶楼主!   回复  引用  查看    

#12楼  2008-04-02 10:14 乌生鱼汤      

hao   回复  引用  查看    

#13楼  2008-04-02 13:51 jisen      

不错,收下先   回复  引用  查看    

#14楼  2008-04-02 15:16 BAsil      

cscript /NoLogo RestartBizTalkHostInstances.vbs
好用,呵呵   回复  引用  查看    

#15楼  2008-07-23 11:24 goldrain [未注册用户]

上网也用命令行如何,cmdgo.com   回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-01 14:29 编辑过
 
另存  打印