写点什么

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

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

关注

评论

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

徐州等保测评公司有哪些?联系电话是多少?在哪里?

行云管家

网络安全 等级保护 过等保 徐州

首例“微服务+国产分布式数据库”架构,TDSQL助力昆山农商行换“心”

腾讯云数据库

数据库 tdsql

低代码平台的爆火,会导致程序员失业吗?

J2PaaS低代码平台

低代码 低代码开发 低代码平台

告别传统压测:全链路压测在中通的实践分享

TakinTalks稳定性社区

全链路压测 系统稳定高可用 性能压测 电商大促 系统保障

微信的业务架构图

张平

架构实战营

你的 APP 能否精准「推送」击中用户?!

融云 RongCloud

消息推送 双十一

新里程碑!TDSQL金融核心系统客户数国内领先

腾讯云数据库

tdsql

模块一作业

doublechun

「架构实战营」

阿里JAVA架构师面试136题含答案:JVM+spring+分布式+并发编程!

Java 编程 程序员 面试

农业CRM系统帮助建设新农村和休闲农业

低代码小观

系统 CRM 农业 管理工具 农业管理

明道云在建筑工程行业的应用场景

明道云

「The Data Way」1024 特别节目|一线工程师的开源路

SphereEx

开源 开源社区 开源青年

TDSQL:解锁数据库前沿技术要点 | 腾讯云数据库DTCC 2021亮点回顾

腾讯云数据库

tdsql

【活动报名】首次 「Apache ShardingSphere Dev Meetup 」期待你的参与!

SphereEx

开源 ShardingSphere 技术沙龙 Meetup SphereEx

恒源云(GpuShare)_训练指引

恒源云

深度学习

按照网络规模来分,服务器分为哪几类?

行云管家

云计算 网络 服务器 IT运维

Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法

杨清强

微信业务架构图和学生管理系统架构

Geek_cb2b43

如何轻松集成多厂家推送服务

融云 RongCloud

消息推送

腾讯云数据库TDSQL PG版重磅升级:查询性能提升百倍

腾讯云数据库

tdsql

微信业务架构图 & 学生管理系统架构设计

Steven

架构实战营

5G、元宇宙和被重新定义的社交出海

融云 RongCloud

TDSQL助力建设数字政务

腾讯云数据库

数据库 tdsql

从小公司到大厂,从8K到30K-一个iOS开发的艰辛路程

iOSer

ios iOS面试

你分库分表的姿势对么?——详谈水平分库分表

vivo互联网技术

MySQL 分库分表 hash Range 数据库表

美团的动态线程池,不依赖中间件可以实现么?

马丁玩编程

Spring Boot ThreadPoolExecutor

Java ArrayList 与 LinkedList

码界行者

Java

实时通信全链路质量追踪与指标体系构建

融云 RongCloud

通信云 Qoe

移动CRM软件是销售人员必备办公工具

低代码小观

管理 软件 移动 CRM CRM系统

浅谈云上攻防——CVE-2020-8562漏洞为k8s带来的安全挑战

腾讯安全云鼎实验室

漏洞分析

Java面试过了京东五面之后,发现掌握了这些技术也没有那么难

Java 编程 程序员 面试

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