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




  • 相关阅读:
    WebAPi返回类型到底应该是什么才合适,这是个问题?
    NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?
    完全抽离WebAPi之特殊需求返回HTML、Css、JS、Image
    模板引擎Nvelocity实例
    C#由变量捕获引起对闭包的思考
    AngularJS之指令中controller与link(十二)
    AngularJS之ng-class(十一)
    AngularJS之WebAPi上传(十)
    AngularJS之代码风格36条建议【一】(九)
    两个List合并去重
  • 原文地址:https://www.cnblogs.com/RChen/p/1345643.html
Copyright © 2011-2022 走看看