從 Silverlight 2 升級到 Silverlight 3 可能會報如下錯誤,程式中可能引用了 asp:silverlight 控制項:
Could not load file or assembly 'System.Web.Silverlight' or one of its dependencies. The system cannot find the file specified.
未能負載檔案或程式集“System.Web.Silverlight”或它的某一個依賴項
原因是 Silverlight 3 SDK 已經移除了 asp:silverlight 和 asp:mediaplayer,這兩個控制項包含在 System.Web.Silverlight.dll 這個 dll 中。
對於升級程式
最簡單的方法是:安裝 System.Web.Silverlight.dll 這個程式集。
一 是,可以同時安裝 Silverlight 2 SDK,Silverlight 2 SDK 安裝包中包含了這個 dll,位於 C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Libraries\Server 中,Silverlight 2 與Silverlight 3 可以並行運行(side-by-side)。
二是,也可以直接從 http://code.msdn.microsoft.com/aspnetprojects 擷取這個 dll 與源碼。
關於新程式
微軟建議使用 html 標準標籤 object (以及Silverlight.js)替代 asp:silverlight,簡單如下
<object type="application/x-silverlight-2"
data="data:application/x-silverlight,"
width="450" height="220">
<param name="source" value="MySilverlightApplication.xap"/>
</object>
注意,FireFox 對於 data 屬性,需要包含一個額外的 , (逗號)結尾。
其他完整的屬性以及參數可以參考 MSDN Silverlight 外掛程式對象參考
此外,下載文檔 ASP.NET Server Controls for Silverlight in the Silverlight 3 SDK 詳細介紹了如何在 Silverlight 3 中用 object 來初始化 silverlight 應用程式。
樣本(見Silverlight 3 object tag param list (aka Where is my asp:Silverlight control?))
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/MyApplication.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
<param name="enableRedrawRegions" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
注意上面的代碼中 iframe 是為了跨瀏覽器安全色性。iframe 防止 Safari 緩衝該頁。當使用者退回訪問過的頁面,Safari 緩衝會阻止 Silverlight 外掛程式重新載入。iframe 必須緊接著 </object>。
參考
Silverlight 3 object tag param list (aka Where is my asp:Silverlight control?)
ASP.NET Controls in Silverlight 3
http://silverlight.net/learn/whitepapers/