AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:0511674
用户头像

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

关注

评论

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

Java岗开发者福利!Github热度飙升的多线程学习手册,已获31k+star

Java 程序员 后端

Java常量池理解与总结,java线程池回收原理

Java 程序员 后端

Java并发关键字-final,java实战视频

Java 程序员 后端

架构实战营第1期-毕业设计项目

Anyou Liu

「架构实战营」

Java注解-一文就懂,java程序设计与实践教程王薇

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26

Java 程序员 后端

Java市场饱和了吗?现在转行学习Java会不会太晚了?

Java 程序员 后端

Java开发必备 Git 分支开发:规范指南及完全学会Git的24堂课笔记

Java 程序员 后端

java实现简单二叉树,深入分布式缓存从原理到实践技术分享

Java 程序员 后端

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

Java 程序员 后端

033云原生之云服务测评指标体系

穿过生命散发芬芳

云原生 10月月更

架构实战营毕业总结

VE

架构实战课

Java实现经典算法,阿里java技术专家面试

Java 程序员 后端

linux去掉空行的几种方法

入门小站

Linux

Java异常架构与异常关键字,海康威视java开发面经

Java 程序员 后端

Java架构师职位常见面试题,看完面试不再慌!

Java 程序员 后端

自由职业者靠什么赚钱?

石云升

职场经验 10月月更

Java并发之Condition详解,springframework教程

Java 程序员 后端

Java是未来的第一编程语言吗?,3分钟告诉你为什么要用Java开发高频交易系统

Java 程序员 后端

Java岗大厂面试百日冲刺【Day42】,java基础面试宝典

Java 程序员 后端

java并发之Condition图解与原理剖析,推荐

Java 程序员 后端

Java开发工作4年还是只会“增删改查”,java技术栈太广

Java 程序员 后端

Java架构师面试之Netty面试专题及答案(共10题,含详细解答

Java 程序员 后端

Java架构师面试问些什么?微服务之springcloud面试题(共22题

Java 程序员 后端

【架构设计模块九】:设计电商秒杀系统

Ryoma

Java死锁的原因例子及解决方法,三年Java开发

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day16

Java 程序员 后端

文本行随机打乱工具

入门小站

工具

Java日常开发的21个坑,你踩过几个?,java基础程序代码编写

Java 程序员 后端

Java注解,java架构师课程哪家好

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14

Java 程序员 后端

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