Windows UWP 既 Windows 10 Universal Windows platform,這個微軟基于Windows NT內核的個運行時(Runtime)平臺,此平臺橫跨所有的 Windows 10 device 例如windows10 手機、平板、serface、以至于樹莓派這樣的嵌入式設備。
由于一些歷史原因之前在 Windows Phone 7.x / 8.x 的應用商店中充斥著大量的 Windows Phone Silverlight(wpsL) 架構的應用,由于應用的開發架構不同,開發者們如果想把WPSL應用遷移到Windows UWP平臺上以服務于更多的Windows10設備就需要一些額外的工作量,有些開發者朋友對此很苦惱,因為有些代碼或者控件在Windows10 UWP平臺已經發生了較大的變化。
今天在這里給大家介紹一個可以幫助開發者升級應用的工具 Mobilize.Net Silverlight bridge 這是一個Visual Studio的集成工具插件,可以幫助開發者將一個WPSL應用轉換成一個Windows 10 UWP應用。(此工具目前是一個預覽版所以在使用的時候還會遇到一些問題,不過即便如此大家可以先下載一個嘗試一下也不會有什么損失對吧。)
首先登陸 mobilize 的網站進行下載
安裝這個 MobilizeNetSilverlightBridge.msi 執行文件
隨后在你的 VisualStudio 項目屬性中會有一個 Convert to UWP 的選項
接著我們選擇好項目的輸入和輸出路徑這里輸入的路徑要注意要使用你的UI項目因為這里會有一些項目間的引用關系,Silverlight Bridge會自動檢測到這些引用進行分析處理一同進行轉換工作。
點擊開始后會自動進行轉換隨后我們可以通過 upgrade report 和 log日志 查看轉換的過程遇到的問題和情況。
轉換以后嘗試編譯,因為這里我用的是一個默認的Pivot模板程序并沒有遇到問題,不過我在嘗試轉換轉換一些其他項目的時候還是遇到一些問題的,請大家在注意在轉換的時候查看Log日志
另外我發現在轉換完成的項目中會多出一個 Helper 文件夾,在這個項目中并沒有使用到但是從代碼上看應該是一個與應用適配相關的處理類。
接下來我嘗試分析一下這個轉換器的工作內容
首先它會更新轉換項目的 manifest 文件這里包括應用的名稱應用的 nuget的引用,應用圖標,Capability,declaration 等功能的遷移
其次它會幫助我們mapping Silverlight API –> WinRT API 這里的內容相對來說就比較復雜了,這里如果是之前應用的業務邏輯應該不牽扯太多的轉變因為畢竟都是C#,關于 Silverlight 和 WinRT 都有的 feature 的 mapping功能應該是控件級的mapping實現的代碼替換,但是由于語法的近似可以轉義大部分功能代碼,但是我也發現在轉換的時候如果是遇到 agent PRoject的時候轉換會失敗,這應該是由于 WindowsRT 的 Background Task機制的問題,希望下一個版本會修復這個問題。
接著是XAML的 mapping 這個邏輯我覺得就更復雜了,因為 XAML的綁定邏輯都是和業務邏輯扭轉的非常緊密,并且涉及到一些頁面樣式或者控件樣式,這樣的內容失敗的幾率就會更大,但是在這里這個工具可以幫助我們了解我們之前使用過的控件在WindowsRT中是否還支持或者應該大致怎樣修改,至少起到了一個指引作用。
還有一個關于 Async and Await APIs 的問題因為這個Async Await是 .net 4.5 的一個新語法,有大量的SDK都改成這種異步的的語法,所以有可能涉及到方法merge的問題請開發者朋友們注意下。
最后強調的是這個bridge本身也是一個開源項目目前在Github上可以找到 傳送門 目前這個預覽版已經包括了700個作用的API映射,在十一月還將會完成更多的API映射(會達到1200個映射功能)開發者朋友不僅可以使用這個工具,而且還可以根據自己的需求進行擴展,并分享給其他開發者使用。
如果你有一個 Windows Phone Silverlight 項目那就不妨嘗試一下這個工具看看可否幫助你把應用遷移到 Windows10 UWP上來 :)
新聞熱點
疑難解答