BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 李彬 关注 1 他的粉丝 发布于 2013年5月3日. 估计阅读时间: 5 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

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)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT