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