QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

javascript 高级编程 之 Array 用法总结

hellocoder2029

Vue

led显示屏的合理亮度很有必要

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

千亿流量并发治理!Alibaba实战Sentinel笔记,为微服务保驾护航

Geek_0c76c3

Java 数据库 开源 程序员 架构

知识经济时代的基石:知识协同

Baklib

区块链商城dapp系统开发,代币模式定制

开发微hkkf5566

英特尔发力“系统级代工”,为芯片制造带来全新可能

科技之家

双非二本程序员,年近30,5年间在大厂中横跳,工资翻了三番

程序知音

Java java面试 后端技术 秋招 Java面试八股文

计算机网络——媒体接入控制——静态划分信道

StackOverflow

编程 计算机网络 9月月更

计算机网络——媒体接入控制的基本概念

StackOverflow

编程 计算机网络 9月月更

存储资源盘活系统,“盘活”物联网架构难题(上)

天翼云开发者社区

架构---作业1

李某人

架构实战营

健康信息化不断建设——2022年8月互联网医疗月度观察

易观分析

医疗

边缘计算在视频直播场景的应用与实践

火山引擎边缘云

边缘计算 视频直播 火山引擎边缘计算

AntDB数据库与鼎甲科技完成产品互认证,共筑数据安全防线

亚信AntDB数据库

AntDB AntDB数据库

数据中台打造企业数据能力组件中心

元年技术洞察

数据中台 SaaS服务应用 PaaS平台化能力

一文读懂“云游戏”

Finovy Cloud

人工智能 云渲染 云游戏

Netty高性能之Reactor模型

C++后台开发

后台开发 reactor 多线程 网络io模型 C++开发

为什么说企业需要实施知识管理?

Baklib

AntDB入选《爱分析:2022数据智能厂商全景报告》

亚信AntDB数据库

AntDB AntDB数据库

计算机网络——点对点协议PPP

StackOverflow

编程 计算机网络 9月月更

分布式系统中自适应统计信息收集策略

KaiwuDB

【redis】Redis cluster是AP架构还是CP架构?

非晓为骁

redis 分布式架构 redis cluster 分布式理论

AX200NGW//2×2.4GHz 2x5GHz MT7915 MT7975 //AR9582 2x 2 900M 802.11an//network card//wallys

wallys-wifi6

MT7915 AX200NGW AR9223

SaaS时代,您的企业与团队需要知识管理工具

Baklib

聊一聊新陈代谢

小鲸数据

创新 新陈代谢

MySQL查询数据库表记录数

源字节1号

架构三原则学习心得

Jack

架构 #架构训练营

易观分析对《上海市促进人工智能产业发展条例》的解读

易观分析

人工智能 上海

仅靠一文便火爆全网!开源阿里绝密800页JDK源码笔记:霸榜GitHub

Geek_0c76c3

Java 数据库 程序员 架构 开发

数据中台与数据平台有什么区别?

雨果

数据中台 数据平台

企业知识管理怎样做?一些解决方案分享!

Baklib

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