2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

用 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:332168

评论

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

What's JVM——自动内存管理

CodeWithBuff

Java 后端 JVM

在哪里跌倒就在哪里躺一会|靠谱点评

无量靠谱

带你全面了解 Git 系列 01 - 深入 Git 原理

淼💦 淼

git 大前端

去中心化分散自治组织通证经济体

CECBC

颠覆传统经营模式,区块链助力餐饮行业数字化革新

CECBC

西瓜口袋系统开发|西瓜口袋软件APP开发

MapReduce排序以及序列化实践

五分钟学大数据

mapreduce 7月日更

hdfs的集群间拷贝、归档、回收站等功能剖析

大数据技术指南

hdfs 7月日更

12个提升PostgreSQL_TSDB 插入性能的建议

数据库 大数据 时序数据库 tsdb 数据智能

JAVA语言异步非阻塞设计模式(原理篇)

有道技术团队

Java 后端 网易有道

“云上超算”——北鲲云超算SaaS平台

北鲲云

云计算 生命科学

那些腾讯阿里字节等大厂面试官,问面试题背后到底在问什么?

前端依依

面试 大前端 经验分享

简单来说云服务器是什么?有哪些品牌?

行云管家

服务器 云服务 云服务器 云管平台

Filecoin矿机挖矿分币系统开发搭建

薇電13242772558

区块链

彼得原理:我们迟早会不胜任自己的岗位?

石云升

职场经验 7月日更

穿越防火墙的奥秘:ICE协议详解

拍乐云Pano

农扶帮系统软件开发内容

DAPP智能合约平台开发|TP钱包DAPP搭建

Geek_23f0c3

dapp DAPP智能合约交易系统开发 区块链、

企业数据安全的「取胜之匙」:区块链隐私保护计算

CECBC

人间烟火|靠谱点评

无量靠谱

小得书院系统APP开发案例

中国产业发展促进会与工信部领导莅临百度 度能领衔助力零碳成长

百度大脑

区块链 人工智能 百度 物联网

拾实娱购系统软件开发

SPA钱包挖矿系统开发详情

Go 学习笔记之 接口

架构精进之路

Go 语言 7月日更

模块二作业

燕燕 yen yen

架构实战营

星际联盟filecoin矿机靠谱吗?星际联盟FIL矿机可以信赖吗?

fil币 ipfs挖矿 fil挖矿 fil矿机

星际联盟抢占FIL挖矿先机:星际联盟单T出矿多少?星际联盟一年能挖出多少FIL?

fil币 ipfs挖矿 fil挖矿 fil矿机

阿里巴巴新产“Java面试指南泰山版”,全是流行技术,限时开放

Java 程序员 架构 面试

字节4面Java研发岗面试经历:redis+TCP+HashMap+算法+JVM+spring

Java 程序员 架构 面试

Java的深拷贝与浅拷贝,能否拿下看你自己!

Java如何学

Java 编程 程序员 浅拷贝和深拷贝

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