50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

ScriptCS:将 C#转变为脚本语言

  • 2013-05-02
  • 本文字数:1302 字

    阅读完需:约 4 分钟

ScriptCS 支持开发者使用简单的文本编辑器编写 C#应用,并通过 Roslyn 执行编译,使用 NuGet 进行包管理。

Windows Azure SDK 团队的项目经理 Glenn Block 启动了 ScriptCS 项目,它是一个尝试将 C#变成脚本语言的业余项目。开发者能够利用其 C#知识,使用简单的文本编辑器编写程序,并通过 Roslyn(微软支持“编译器即服务”的 API)完成编译。ScriptCS 使用 NuGet 挖掘包的依赖关系并加载二进制文件。Roslyn 的 r:语法用于添加 GAC 或其他 DLL 引用。

如果一个 hello.csx 文件包含下面这行 C#代码:

复制代码
Console.WriteLine("Hello World!");

那么运行命令“scriptcshello.csx”,会在控制台输出“Hello World!”字符串。

这个例子既不需要命名空间或类定义,也不需要创建项目,不会生成.obj 或.exe 文件。Roslyn 负责编译而 ScriptCS 执行编译结果。

另一个复杂一些的例子是创建一个 Web API 主机:

复制代码
using System;
using System.IO;
usingSystem.Web.Http;
usingSystem.Web.Http.SelfHost;
var address = "http://localhost:8080";
varconf = new HttpSelfHostConfiguration(new Uri(address));
conf.Routes.MapHttpRoute(name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var server = new HttpSelfHostServer(conf);
server.OpenAsync().Wait();
Console.WriteLine("Listening...");
Console.ReadKey();

ScriptCS 提供了插件机制,使用了所谓的“脚本包(script packs)”,Block 解释道:

脚本包能够提供命名空间的导入和引用,以及脚本能够通过 Require API 使用的对象。

脚本包的主要目的是让开发者能够更容易地使用框架编写脚本。

由于脚本包可以通过 NuGet 包安装,因此它们很容易发现和使用。

让ScriptCS 运行在Mono 之上的工作正在进行, 向Roslyn 添加调试功能也在调研之中。 Sublime Text 已经创建了一个用于 ScriptCS 的插件,在简单的编辑器中支持语法高亮。还有一种选择,是通过 Roslyn 针对.csx 文件在 Visual Studio 中生成语法高亮功能。

根据他在 Node.js 方面的经验, Block 列出了将 C#脚本化的优势

  • 没有项目,只有脚本——我热爱 node.js 的原因之一在于不需要创建项目。开发者可以直接进入一个文件夹创建 js 文件,不会感到受束缚。
  • 不需要 IDE,只需要一个文本编辑器。
  • 在程序集之上的包——在 node 中,如果想要获取某些内容,那么只需要使用 npm 来下载包即可。这非常简单。开发者只需要拥有自己的应用和本地 node_modules 文件夹即可。
  • 无需编译——这是个重要因素。在 node 中,开发者只需要运行 node.exe 和自己的程序就能让它运转。开发者无须首先创建可执行文件,只需要直接运行。

借助 Roslyn 和 NuGet,这一切成为了可能。ScriptCS 仍然是处理程序集,但是“不必单独管理它们,只需要安装包即可。”

ScriptCS 采用 Apache 2 许可,它目前并未获取微软的支持。

查看英文原文 ScriptCS: Turning C# into a Scripting Language


感谢臧秀涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-05-02 09:0511899
用户头像

发布了 256 篇内容, 共 86.3 次阅读, 收获喜欢 10 次。

关注

评论

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

从被踢出局到5个30K+的offer,一路坎坷走来,沉下心,何尝不是前程万里

北游学Java

Java 数据库 分布式 微服务

我常用的两个外国应用

彭宏豪95

产品 产品经理 工具 社交 Slack

计算机原理学习笔记 Day6

穿过生命散发芬芳

计算机原理 4月日更

Java-技术专题-Stream.foreach和foreach

码界西柚

Java stream collection

Markdown 文档可折叠化展示

耳东@Erdong

4月日更

GraphX图计算组件最短路算法实战

小舰

4月日更

Python OpenCV 图像2D直方图,取经之旅第 27 天

梦想橡皮擦

Python OpenCV 4月日更

使用JavaScript解析XML文件

空城机

JavaScript xml 大前端 递归 4月日更

Vue3、Vuex4、Ant Design2的实战项目开发管理系统

devpoint

vite Vue3 and design of vue

专访中寰卫星导航项目管理部负责人卜钢:如何演绎人生之路

打工人!

采访 调查采访能力考核

const与指针交集的那些事

Bob

c++ 编程语言 4月日更

流计算:流式处理框架

正向成长

流式计算框架

安于现状的人,不值得同情

小天同学

深度思考 个人感悟 4月日更 突破现状

不愧是阿里内部“Spring Cloud Alibaba学习笔记”这细节讲解,神了!

Java架构追梦

Java 阿里巴巴 架构 微服务 SpringCloud

mosquitto支持websocket搭建记录

风翱

4月日更 web socket mosquitto

车行易携手睿象云:告警管理体系全升级

睿象云

LeetCode题解:17. 电话号码的字母组合,回溯,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Python基础之:struct和格式化字符

程序那些事

Python 数据分析 程序那些事

接口的幂等性怎么设计?

xcbeyond

设计 幂等性 4月日更

聊聊十种常见的软件架构模式

架构精进之路

4月日更

Java 常见 bean mapper 的性能及原理分析

Java小咖秀

Java bean Copier

阿里内部热捧“Spring全线笔记”,不止是全家桶,太完整了

Java架构追梦

Java spring 源码 架构 微服务

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

Java 编程 程序员 面试 计算机

1分钟搞定 Nginx 版本的平滑升级与回滚

民工哥

nginx 后端 linux运维

隐私安全的城池营垒,能成为手机品牌高端化的赛点吗?

脑极体

建议收藏!看完全面掌握,最详细的Redis总结(2021最新版)

民工哥

运维 后端 redis cluster NoSQL数据库

浅谈 MySQL 集群高可用架构

民工哥

MySQL MySQL 高可用 集群 linux运维

学会这15点,让你分分钟拿下Redis数据库

民工哥

后端 linux运维 redis cluster

json基础学习

ベ布小禅

4月日更

智慧城市现状调研

程序员架构进阶

华为 智慧城市 28天写作 4月日更

Golang Slice 数组和切片

escray

学习 极客时间 Go 语言 4月日更

ScriptCS:将C#转变为脚本语言_.NET_Abel Avram_InfoQ精选文章