用 Chiron 运行 IronPython 编写的 Silverlight 程序
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 中添加引用时必须这样写:
如果程序集不能加载,则使用下列语句可以得到更为详细的信息:
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 漫长的编译过程,修改代码后直接刷新浏览器就能看到效果,如果你还没有尝试过这样的体验,不妨试试吧,感觉很好的。
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.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 漫长的编译过程,修改代码后直接刷新浏览器就能看到效果,如果你还没有尝试过这样的体验,不妨试试吧,感觉很好的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2006-12-02 逐步改用 IronPython 开发你的 ASP.NET 应用程序