zoukankan      html  css  js  c++  java
  • 用 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 中添加引用时必须这样写:

    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 漫长的编译过程,修改代码后直接刷新浏览器就能看到效果,如果你还没有尝试过这样的体验,不妨试试吧,感觉很好的。




  • 相关阅读:
    解释机器学习模型的一些方法(一)——数据可视化
    机器学习模型解释工具-Lime
    Hive SQL 语法学习与实践
    LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)
    LeetCode 148. 排序链表(Sort List)
    LeetCode 18. 四数之和(4Sum)
    LeetCode 12. 整数转罗马数字(Integer to Roman)
    LeetCode 31. 下一个排列(Next Permutation)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    论FPGA建模,与面向对象编程的相似性
  • 原文地址:https://www.cnblogs.com/RChen/p/1345643.html
Copyright © 2011-2022 走看看