Windows Phone 7 – Windows Phone Class Lib與.NET Class Lib的差異
開發Windows Phone 7剛開始時,我一直遇到一個問題,就是想直接把.NET時期建立的Class Library放入WP7的專案中,
但VS2010總是提示了如下的訊息:
那我就開始思考,「為何沒有辦法直接把.NET編譯好的Library直接加入至WP7的專案中,那又為何MS提供的一些Library卻可以?」
因此,在往下去探討之前,我們先來了解一下Windows Phone 7整個針對開發者所繪製出各模組元件之間運作架構圖:
從上圖可以發現到WP7如果透過是以Silverlight來開發的App,需特別注意在Silverlight支援的部分,由於Silverlight在WP7比較接近
提供呈現層與多媒體控制的部分(Silverlight Presentation and Media),當然Silverlight也有內鍵很多源的類別提供開發者完成任務,
另外,往下看到「Common Base Class Library」的部分,這部分都是常見的.NET Framework支援的項目,包括:Runtime、IO、Text等。
看到這裡,也許就開始疑惑了,這裡使用的Common Base Class Library與過去使用的.NET Library到底有什麼不同呢?
分別開二個不同的Library來看一下,
(a) 一般的.NET Library為例:
注意System的Dll檔來源。它採用的是.NET Framework為主要運作的架構。
(b) WP7的Library為例:
注意System的Dll檔來源。它採用的是Silverlight 4中專用於Windows Phone的System.dll。
由上述簡單的分類,可以看出二者最大的差別在於,整個在使用.NET Framework時,一定會參考的重要元素:
「System」與「System.Core」。這二個元素來源不同的dll,也代表著二者運作的runtime有所不同。
因此,不能直接把給.NET Framework的dll移動到WP7中的原因,是否可以了解了呢。
[解決方法]
針對已經開發的DLL檔,如果想要直接搬上WP7上使用,因為不同的Runtime架構,看起來是不太可行的作法,
但並不是沒有辦法解決,換個方法,我們一樣可以把原有的DLL檔,透過包裝的方式,讓WP7的App也可以使用。
(1) 將Dll包裝成為一個Web Service或WCF Service:
透過此方式,需依賴手機具有上網的能力才能完成功能,例如:手寫輸入,我個人的猜測它是透過該方式來開發。
將dll包裝成新的Web Service好處可以讓原有的功能與邏輯可以繼續被保留下來,而且可以配搭網路的服務,
有效控管到時發佈出去的App使用量,或者在進行功能更新時,不需要重新發佈到marketplace等待審核。
----
以上是自己對於遇到為何過去開發一些好用的dll或第三方提供的dll沒有辦法正常使用於WP7的經驗,
當然我的經驗是比較少的,如果您在閱讀中有看過那些相關的解決方法,或是詳細的說明,也希望能分享給我。
[補充]
〉至於Windows Phone 7是否也使用Comptact Framework呢?
答案是Yes的。WP7內雖然透過Silverlight與XNA做為呈現層的部分,但底層仍保留部分.NET CF的模組,
用於控制Silverlight與XNA在runtime時期的一些流程與控制裝置運作硬體軟體處理邏輯。
至於原本透過Compact Framework開發的dll可否繼續使用呢?
這個我還沒有試過。我如果有新的測試結果,我會在補上來。
References:
‧.NET Compact Framework for Windows Phone 7 series
‧Windows Phone 7 Series Programming Model
‧Windows Phone 7 tools and the Compact Framework in Visual Studio 2010
‧Comparing Windows Phone with .NET Compact Framework 3.5
‧Windows Phone 7 - Compact framework?
‧Configuring your DomainService for a Windows Phone 7 application
‧Accessing WCF Data Services from WP7 CTP.
‧http://www.dotblogs.com.tw/ouch1978/archive/2011/03/16/wpf-stretch-listboxitem.aspx
‧http://msdn.microsoft.com/en-us/library/ff402535(v=vs.92).aspx
‧http://msdn.microsoft.com/en-us/library/gg490771.aspx