写点什么

用 psake 来简化自动化脚本的构建

  • 2009-10-20
  • 本文字数:1257 字

    阅读完需:约 4 分钟

psake 是一个集成了 PowerShell 的用来创建自动化脚本的工具,其 2.01 版本集成了 PowerShell2.0 。Ayende Rahien 正使用它来创建 Rhino 工具。psake 项目的拥有者 James Kovacs 向我们解释了该工具最新版本的改进之处:

psake 最新版本通过使用构建脚本中的 PowerShell 语法,避免了与可执行的 XML 文件相关的尖括号标识 (<>)。psake 借鉴了 rake(即 Ruby 中的 make) 和 bake(即 Boo 中的 make) 的语法结构,但它更容易用来编写脚本,因为它还利用了使用者已知的命令行编程知识。

除了兼容 PS2.0 之外,psake2.01 还被改写成了一个 PS 模块,这样做的主要好处是:

  1. 所创建编译的脚本不需要知道 psake 安装在哪里,它们只需要调用 Invoke-psake 方法就可以执行了;
  2. 封装性:不再需要全局变量,因为除了显示地导出之外,对于某个模块来说它们可以被视为私有的;
  3. 如果需要的话,可以卸载模块来除去内存中所有的代码和变量。

2.01 版本的其他改进之处还有:

  1. 采用了与之前不同的编码风格;
  2. 使用 Try/Catch 代替"Trap"语句;
  3. 除去了"exec"函数;
  4. 现在使用者可以为一项任务定义前置和后置动作;
  5. 现在使用者可以定义任务名称的格式;
  6. 现在使用者可以定义一个"TaskSetup"方法,此方法将在每个任务开始之前被执行(从 NUnit 中借鉴而来);
  7. 现在使用者可以定义一个"TaskTearDown"方法,此方法将在每个任务结束之后被执行(也是从 NUnit 中借鉴而来);
  8. 创建了名为"psake_buildSucceeded"的全局变量,当编译成功后此变量将被设置为 true。脚本可以通过检查此变量,来判断是否编译成功;
  9. 在 Run-Psake 时还加入了一个"$noexit"开关变量,当此开关打开时任何函数执行结束前都不会调用 exit() 方法,这样使用者就可以在 PS 窗口不被关闭的条件下,通过命令行来测试你所创建的脚本了。(此处默认的操作是,当一个脚本运行失败时,它将会调用 exit(1) 方法,这样在调用的代码中就可以判定此脚本是成功或失败了)
  10. psake-buildTester.ps1 脚本必须做一些小改动才能调用 Invoke-psake 方法.
  11. 在.\examples 目录中加入了更多的示例来演示后置条件(POST conditions),前置和后置动作(PRE and POST Actions)以及其他(新特性)的用法。

Ayende Rahien 写了关于使用 psake 来创建他的 Rhino 工具 psake to build his Rhino Tools 的相关文章。这个项目起初使用了一种十分复杂的基于 NAnt 的编写工具,仅仅是最初的尝试,开发者就写出了海量的代码,这使得他们感到惊恐万分。经过对使用 Rake 或 Bake 来开发的可行性评估后,Rahien 转向使用 psake 并仅用了 50 行代码就解决了工作。

psake 可以在 GitHub 网站的 MIT License 页面下载.

查看英文原文: Simple Build Automation with psake


译者介绍:崇桦,澳大利亚悉尼大学计算机科学与通信技术学士,多年的海外留学工作经历。现于 iConnect China 任职 Team Leader,带领团队进行微软产品的开发与测试工作。有丰富的.NET 产品设计,软件开发经验,对项目管理,敏捷开发的有相当的研究。InfoQ 中文站内容团队,尤其是架构、SOA 和Ruby 社区需要您的参与,有意者请邮件至 editors【AT】cn.infoq.com

2009-10-20 01:331875

评论

发布
暂无评论
发现更多内容

探索1688商品详情API:轻松解锁商品信息的全面视角

代码忍者

API 接口 pinduoduo API

集团企业分级管理授权能力建设

芯盾时代

iam 权限管理系统 授权访问

火山引擎数据飞轮最新活动:结合大模型能力,探索金融行业数智化落地新可能

字节跳动数据平台

数据飞轮

一个明知没啥前途也要开张的市场开张了

明道云

收藏品NFT的开发流程

北京木奇移动技术有限公司

NFT数字藏品系统 NFT开发 软件外包公司

大数据平台Bug Bash大扫除最佳实践

京东科技开发者

零代码赋能高等教育数字化转型的实践与思考

明道云

心理行业需要用到堡垒机的几个情形讲解

行云管家

心理 网络安全 等保 堡垒机

audirvana mac中文破解版 原生无损音乐播放器

Rose

制造业数字化演进历程中的创新与HAP 赋能

明道云

从MySQL JOIN 算法角度看如何优化SQL

京东科技开发者

更轻更省!DataSimba敏捷版直播火热预约中

奇点云

普洱市具有资质等保测评机构在哪里?电话多少?

行云管家

网络安全 等保 云南 普洱市

创意无限,绘图神器!OmniGraffle Pro,设计新高度

Rose

解锁数据洞察新境界!Tableau Desktop Pro 2020

Rose

GPUStack v0.4:文生图模型、语音模型、推理引擎版本管理、离线支持和部署本地模型

SEAL安全

Stable Diffusion LLM Whisper Speech-to-Text Text-to-Speech

阿里大佬翻遍全网Java面试文章,总结出这份1658页文档,GitHub收获25K+点赞

Summer

Java 编程 程序员 面试 大厂

七牛云荣获「2024 鸿蒙生态 SDK 星河奖」

七牛云

信创背景下医院信息化建设的挑战与机遇

明道云

想在 Java 八股文面试中脱颖而出?这1000 道互联网大厂 工程师面试题必不可少

Summer

Java 程序员 面试 架构师 编程开发

macOS Developer Beta Access Utility(苹果开发者工具)

Rose

Elasticsearch vs 向量数据库:寻找最佳混合检索方案

Zilliz

全文检索 elasticsearch 向量检索 Milvus 混合检索

最新前端架构设计:中央仓库管理-基于工作空间和git-submodule实现共用和管理

京东科技开发者

淘宝天猫API接口探索:商品详情与关键字搜索商品列表的实战应用

代码忍者

API 接口 pinduoduo API

MAMP PRO永久版:本地开发神器!

Rose

GPUStack v0.4:文生图模型、语音模型、推理引擎版本管理、离线支持和部署本地模型

GPUStack

Stable Diffusion LLM Whisper Speech-to-Text Text-to-Speech

OpenAI o1 模型到来后,谈谈提示词工程的未来

Baihai IDP

程序员 AI Prompt LLMs 提示词工程

RFID技术在ERP系统中的集成应用

积木链小链

ERP RFID

ARM版CentOS Linux系统镜像文件(苹果M1专用) 及安装教程

Rose

SketchUp Pro 2023:专业级3D建模,轻松实现创意构想

Rose

数字藏品NFT的合约开发

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

用psake来简化自动化脚本的构建_.NET_Abel Avram_InfoQ精选文章