Silverlight Dynamic Languages SDK 目前 host 在 CodePlex 上,使用它可以用 IronPython/IronRuby/Managed JScript 等动态语言编写 Silverlight 程序,其项目的主页在:
http://www.codeplex.com/sdlsdk

我做了一些尝试,发现要实际用来开发点东西,还是有不少需要注意的地方,特别是程序集引用的问题。故记录与此,以供参考。

假设程序的目录组织结构如下(根据 Silverlight Dynamic Languages SDK 里的例子):

\python\  这里存放所有 .py 和 .xaml 程序
\javascripts\
\stylesheets\
\index.html

index.html 文件中包含 Silverlight 插件,指向 python 目录打包生成的 xap 文件 python.xap.

在这样的前提下,有下列几个方法运行程序:

一、打包后静态方式运行 html 文件

先执行命令:
chiron /z:python.xap /d:python

这个命令所做的事情:

1. 压缩 python 目录下的所有文件到 python.xap 这个包中。
2. 除此之外,在包中还包含一个 AppManifest.xaml 文件,其中的 AssemblyPart 引用来自

chron.exe.config 文件里的 <AppManifest.xaml> 节中的定义。所以,如果需要在运行这个压缩命令时,

打包进去额外的程序集,需要做两件事:a. 将程序集复制到 python 目录下,b. 如上所述在

chiron.exe.config 文件里增加相关程序集声明。

通过这种方式生成的 xap 文件可以直接被 html 文件引用,在不需要 chiron 的情况下直接打开执行。

二、通过 Chiron.exe 直接动态生成 xap 文件执行

1. 在 Chiron.exe.config 里增加相关引用程序集的声明
2. 在 python 目录下/或 chiron.exe 所在的同一个目录下增加要引用的程序集 dll 文件。
3. 执行 chiron.exe /b:index.html

这种情况下:
a. 如果更新了引用的程序集,只需将其复制到 python 目录下覆盖即可,然后刷新页面即可看到效果。
b. 如果需要增加对其他程序集的引用,除了a的步骤,还要在 chiron.exe.config 里增加一项,并重新启动

chiron web服务器才能看到效果。

注意点:

在 python 中添加引用时必须这样写:

import clr
# 这里如果写 clr.AddReference("TestLib") 则会报错,这是 Silverlight 的一个已知的问题。
clr.AddReference("TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
from TestLib import Class1

如果程序集不能加载,则使用下列语句可以得到更为详细的信息:
clr.LoadAssemblyByName("TestLib")

奇怪的是,对于 System.Windows.Controls.Data.dll 这个 dll,不需要写出程序集的全名,用下列简略的名

称即可引用到:
clr.AddReference("System.Windows.Controls.Data")

估计对 Silverlight sdk 里的 dll 都是如此,这一点我还没有验证。

另外提一下,因为官方提供的例子都是一个简单的 .py 或者 .rb 文件加载 xaml 的场景,我做了一个简单的架构,可以实现类似 C# 那样的 Code behind 方式模块化开发 Silverlight 程序,参考这里:
http://www.cnblogs.com/RChen/archive/2008/08/01/1258011.html

使用 IronPython 开发最大的好处就是快速开发,快速测试,不需要 VS 漫长的编译过程,修改代码后直接刷新浏览器就能看到效果,如果你还没有尝试过这样的体验,不妨试试吧,感觉很好的。

用 Chiron 运行 IronPython 编写的 Silverlight 程序相关推荐

  1. 编写运行最简单的java程序——使用记事本编写java程序

    编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...

  2. C语言学习之编写一个C程序,运行时输人abc三个值,输出其中值最大者。

    编写一个C程序,运行时输人abc三个值,输出其中值最大者. #include <stdio.h> void main(){int a,b,c,max;printf("请输入三个数 ...

  3. Windows8 64位运行Silverlight程序不能访问WCF的解决方案

    公司的项目是Silverlight+WCF,而我的本本是Win8 64位系统,一直无法正常运行Silverlight程序,一个同事找到了方案,现分享出来 一种情况是,Vs2010运行程序时,报无法加载 ...

  4. java application程序_如何Java编写的application程序像exe一样方便shy;的运行

    Java编写的application程序是否能够最终形成一个类似于exe一样的可执行文件,难道就只能用命令行运行??? ---------------------------------------- ...

  5. python编写的程序可以在任何平台中执行-在Windows平台上编写的Python程序无法在Unix平台运行。...

    [单选题]在中华人民共和国境内飞行的民用航空器必须具有: ( ) [单选题]属于发热激活物的是: [单选题]年满( )周岁可以独立实施民事法律行为视为完全民事行为能力人 [单选题]在DIC的原发病中, ...

  6. win10系统下vs2015编写的C++程序在XP系统里运行

    虽然目前很多用户的电脑系统都是win7到win10,但还有部分用户的电脑系统是xp,比如一个项目要兼顾到xp用户,而通常编写的vs2015程序在xp里并不能运行,先做一个如下测试,使用vs2015创建 ...

  7. python只能运行在windows平台上吗_在Windows平台上编写的Python程序无法在Unix平台运行。...

    问题:在Windows平台上编写的Python程序无法在Unix平台运行. 更多相关问题 Because plants cannot move or talk, most people believe ...

  8. python可以在多种平台运行、体现了_在Windows平台上编写的Python程序无法在Unix平台运行。...

    问题:在Windows平台上编写的Python程序无法在Unix平台运行. 更多相关问题 某船公司2003年2月,建造了两艘航行于武汉-南京的2000吨油船,双壳结构形式,至今使用良好,为公司创 肾病 ...

  9. 编写并运行php程序,上传所编写的PHP程序代码,并上传运行后的效果截图

    上传所编写的PHP程序代码,并上传运行后的效果截图 更多相关问题 [多选] 对税务机关的下列行政行为,纳税人可以申请行政复议的有(). [多选] 纳税人收到税务机关的行政处罚决定书之后,在法定期限内可 ...

最新文章

  1. IJCAI 2020灭霸式拒稿,AI审稿是否更公平?
  2. jdbc驱动_JDBC概述和CRUD
  3. 【学习随手记】POSIX消息队列执行报Permission denied的问题。
  4. Qt 5.12 LTS(长期维护版本)中Qt Quick的性能改进
  5. web_find和web_reg_find的用法和区别
  6. CodeForces - 1373E Sum of Digits(贪心)
  7. vs2012下 error4996
  8. VC内存泄露检查工具:Visual Leak Detector
  9. shell两个时间字符串插值_Shell 脚本速成
  10. Latex的空格 转载
  11. Linux学习笔记019---Centos7下安装Maven
  12. 得力D991CN Plus计算器评测(全程对比卡西欧fx-991CN X)
  13. Java弹球游戏,刚学Java时做的
  14. Ubuntu18.04双系统安装+GPU+CUDA10+CUDNN7+ANACONDA3+PYTHON+PYCHARM
  15. Linux 设置PS1变量颜色
  16. 电脑html接口显示器不亮,电脑主机开了显示器没反应无信号及键盘鼠标不亮的解决方法...
  17. 【持续更新】java多线程面试题整理
  18. Kotlin let with run apply also filter if常规用法笔记
  19. 一些关于通信拓扑、图论的内容笔记
  20. 《Python开发 - Python杂记》Python与C/C++混合编程

热门文章

  1. vscode php调试插件,构建VSCode开发调试环境(强大且实用的插件推荐)
  2. bootstrap java_查看tomcat启动文件都干点啥---Bootstrap.java
  3. C++_模板特化(specialization),模板偏特化(局部特化)(partial specialization)
  4. 范围解析操作符 (::)
  5. vue拖动添加模块展示_一个全新的Vue拖拽特性实现:“移动”部分
  6. php8的jit如何使用,PHP JIT 是什么?PHP8 新特性之 JIT 图文详解
  7. 怎么将jsp中var报错_招聘中不得将全日制作为限制性条件,怎么就不公平了?
  8. vue js中报红_vue:我和node、webpack的情深似海
  9. java确定一个整数是否溢出,java-判断一个整数是不是回文,考虑溢出
  10. python 模拟浏览器selenium 微信_Spider-Python爬虫之使用Selenium模拟浏览器行为