写点什么

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

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

关注

评论

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

服了,这款开源类库可以帮你简化每一行代码

沉默王二

Java GitHub 后端 hutool

一文搞懂ReactNative生命周期的进化

凌宇之蓝

react.js 面试 大前端 React Native

分布式文件存储数据库 MongoDB

哈喽沃德先生

数据库 nosql mongodb mongo 非关系型数据库

勾魂!在Github白嫖左程云1470页数据结构与算法+视频

996小迁

Java 架构 面试

C/C++最佳实践

jiangling500

c c++ 最佳实践

6小时搞定云原生:从基础概念到上手实践

京东科技开发者

云原生

一文带你读懂 Swift 社区最新开源的算法库

镜画者

ios swift 算法 apple

week04 作业

xxx

分布式缓存架构,消息队列,负载均衡

garlic

极客大学架构师训练营

架构师训练营第2期 第1周 作业一:食堂就餐卡系统设计

老腊肉

Linux内核系统结构

Linux 操作系统 内核 系统调用 操作系统结构

java安全编码指南之:线程安全规则

程序那些事

java安全编码 java安全 java安全编码指南 java代码规范 java代码安全

Java中的5大队列,你知道几个?

王磊

Java

Docker架构

混沌畅想

Docker 容器 Docker架构

架构师训练营第2期 第1周 作业二:学习总结.md

老腊肉

week04总结

xxx

编码之路,与君共勉

yes

程序人生

c++bind函数使用

良知犹存

c++

一份超级完整实用的PyCharm图解教程,8K字赶紧收藏起来

计算机与AI

Python IDLE 开发环境

【得物技术】谈谈缓存的一二三四五

得物技术

缓存 架构 技术 缓存穿透 缓存击穿

项目吐槽之需求分析一

Geek_XOXO

项目管理 pmp

一文读懂线程池的工作原理(故事白话文)

捡田螺的小男孩

Java 面试 线程池 线程池工作原理

甲方日常 36

句子

工作 随笔杂谈 日常

1024!奈学教育致敬程序员3+2战略发布会重磅来袭

奈学教育

1024 奈学教育

spring-boot-route(二十三)开发微信公众号

Java旅途

Java Spring Boot

iOS性能优化 — 二、卡顿监控及处理

iOSer

性能优化 编程语言 监控 ios开发 卡顿

在线EXCEL编辑器-Luckysheet

奇异石榴果

Java 开源 Excel bigtable js

发布3个月获得5K Star的Luckysheet - 基于MIT协议的开源电子表格

奇异石榴果

Java 开源 大前端 Excel html/css

架构作业:一致性hash

Nick~毓

Scikit-Learn中的特征排名与递归特征消除

计算机与AI

学习 数据科学 特征选择 降维 scikit-learn

「架构师训练营」第 1 周作业 - 食堂就餐卡系统设计

小黄鱼

极客大学架构师训练营

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