用 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 漫長的編譯過程,修改代碼後直接刷新瀏覽器就能看到效果,如果你還沒有嘗試過這樣的體驗,不妨試試吧,感覺很好的。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章