DLR in Silverlight
DLR(Dynamic Language Runtime)是Silverlight中提供的一套非常强大的动态语言运行时。目前2.0 beta2中支持Python,Ruby和JSX。利用DLR,你可以很方便的使用熟悉的动态语言编写Silverlight程序。本文主要介绍如何在托管语言中调用动态语言。
首先,我们需要初始化动态语言的环境配置,从中获取所有可以使用的动态语言列表,然后得到相应动态语言的运行引擎。
ScriptRuntimeSetup setup = new ScriptRuntimeSetup(true); //true表示载入所有支持的动态语言的环境配置
ScriptRuntime runtime = ScriptRuntime.Create(setup); //创建动态语言运行环境
foreach (LanguageProviderSetup langSetup in setup.LanguageProviders) //遍历所有动态语言的环境配置
{
try
{
ScriptEngine engine = null;
if (runtime.TryGetEngine(langSetup.Names[0], out engine)) //尝试获取动态语言的运行引擎
{
//engine就是我们需要的运行引擎
}
}
catch (MissingTypeException) //处理创建不支持的动态语言时可能抛出异常
{
}
}
获取了运行引擎后,我们就可以执行动态语言的代码了。
public class MyErrorSink : ErrorSink //编译错误处理
{
IList< string> m_ErrorMsg = new List< string>();
public IList< string> ErrorMsg
{
get { return m_ErrorMsg; }
}
public MyErrorSink()
{
}
public virtual void Add( SourceUnit source, string message, SourceSpan span, int errorCode, Severity severity)
{
if (severity == Severity.Error || severity == Severity.FatalError)
{
m_ErrorMsg.Add(message);
}
}
}
LanguageContext langContext = HostingHelpers.GetLanguageContext(engine);
SourceUnit sourceUnit = langContext.CreateSourceUnit(new SourceStringContentProvider("1/4+3"), null, SourceCodeKind.Expression); //创建代码序列:1/4+3
MyErrorSink errorSink = new MyErrorSink();
try
{
Scope scope = new Scope();
object ret = sourceUnit.Execute(scope, errorSink); //执行动态语言代码,ret就是执行结果的返回值了
if (errorSink.ErrorMsg.Count > 0) //检查编译错误
{
//
}
}
catch (Exception)
{
}
是不是很方便呢 :-) 完整的DLR文档请参考http://compilerlab.members.winisp.net/dlr-spec-hosting.pdf(英文版)
PS:你也可以使用配置文件或者直接初始化动态语言运行引擎。: )
Software Development Engineer
范翔
DLR in Silverlight相关推荐
- 收集一些有关SilverLight(WPF/E)的链接
1.介绍类: 1.1Microsoft欲以SilverLight挑战flash/flex 1.2能提供丰富体验的Microsoft SilverLight 1.3Silverlight 1.4Silv ...
- Linux下的Silverlight:Moonlight 1.0 Beta 1发布了
Moonlight是微软Silverlight的一个开源实现,其目标平台是Linux与Unix/X11系统.自从2007年9月开始,Moonlight就在Mono项目下进行了开发,它是由Novell发 ...
- 一起谈.NET技术,初识Silverlight 4及其架构
简介 Silverlight 4是今年早些时候发布的.这项技术为我们带来了许多革新.它不仅是为用户带来了丰富的交互式的互联网和多媒体内容,还为我们提供了强大的轻量级的平台.我们可以在此平台上开发可移植 ...
- 随便说说Silverlight
Silverlight1.0马上就要发布了,为了尽快抢占Flash占有的网络多媒体市场吧,随着视频共享应用的火热,潜藏了太大的广告商机,当然还有在线休闲小游戏什么的,甚至广告本身就可以用Silverl ...
- 网上Silverlight项目收集
1.Silverlight + OpenXML Video :This is a Silverlight proof of concept application that displays rand ...
- 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月16日-2月5日)
分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(1月16日-2月5日) 本周Silverlight学习资源更新 WIn2003部署Silverlight coo ...
- Silverlight 结构
Silverlight 本主题介绍 Microsoft Silverlight 的基本结构和组件.Silverlight 不仅是一个漂亮的画布,可用来向最终用户显示丰富的交互式 Web 内容和媒体内容 ...
- silverlight | chrion.exe-动态语言创建silverlight
看过文档后的总结 原文:http://silverlight.net/Quickstarts/ProgramDlr.aspx 1.安装silverlight SDK chrion 默认路径:C:/Pr ...
- Silverlight 2教程(四):Chiron.exe:Silverlight 2打包和动态语言部署工具
VS在编译时Silverlight 2的应用程序时,会先将cs等文件进行编译成dll,然后会调用Chiron.exe这个打包工具打包成.xap文件.也可以使用它进行动态语言无打包部署.Chiron.e ...
最新文章
- 0.0 Introduction-机器学习笔记-斯坦福吴恩达教授
- 知乎回答多线程爬虫案例
- SQL_server_2000安装过程指导
- php basic syntax
- 人工神经网络——笔记摘抄1
- java中与接口类,Java中类与类、类与接口、接口与接口的关系
- HDU - 6333 Harvest of Apples
- Docker部署Ghost
- 配电室站房监控改造工程 环境辅助控制系统
- 地面波天线怎样能多收台_教你怎样挑选DTMB地面波天线
- 《大化传输网》学习笔记(三)————OTN系统的保护
- Linux 修改环境变量设置的三种方式
- shell脚本实现从master节点批量配置salve节点(主机名有瑕疵,IP映射,ssh服务)
- redis基础命令和数据操作命令学习笔记
- 25岁裸辞转行5G网络优化工程师:比盲目赶路更为重要的,是知道方向—分享优橙小故事
- 【MQTT基础篇(五)】发布、订阅和取消订阅
- 视频的上传及购买播放
- 那些年遇到的DB2大坑
- 6666端口,地址访问谷歌浏览器,火狐浏览器限制
- 陈卫军著赚钱思维正式出版,又一次颠覆商业大脑传统思维!
热门文章
- 掌机发展简史及未来趋势分析
- 一篇文章弄懂变压器的等效原理
- lesson 21 mad or not 是不是疯了-把什么逼疯,be driving sb mad,live near 住在什么附近,过去将来时的被动式 will be done
- MATLAB-实现太阳、地球、月亮三者之间运转关系的模拟
- Windows Azure Platform (九) Windows Azure Storage Service存储服务
- 团子杂记:SAP可持续化发展解决方案之产品碳足迹管理(PFM)简介
- ContentTypes
- DTU是什么及其用途
- ibm服务器安装ghostxp系统,windows xpsp3 ghost安装最实用的方法
- ppt转换pdf格式软件