Presentation is loading. Please wait.

Presentation is loading. Please wait.

OSP201 多平台類別函式庫開發實戰 黃忠成 技術總監 黃忠成資訊工作室.

Similar presentations


Presentation on theme: "OSP201 多平台類別函式庫開發實戰 黃忠成 技術總監 黃忠成資訊工作室."— Presentation transcript:

1 OSP201 多平台類別函式庫開發實戰 黃忠成 技術總監 黃忠成資訊工作室

2 .NET Platform Windows Phone Silverlight .NET Framework
XBox Windows Store Apps

3 直接交互Reference (.NET Class Library)
App .NET Framework App Silverlight ClassLibrary.dll .NET Framework Windows Store Apps App Windows Phone

4 直接交互Reference (Windows Phone Class Library)
App .NET Framework App Silverlight ClassLibrary.dll Silverlight Windows Store Apps App Windows Phone

5 直接交互Reference (Silverlight Class Library)
App .NET Framework App Silverlight ClassLibrary.dll Windows Phone Windows Store Apps App Windows Phone

6 Share Binary is hard in .NET Platform

7 How to Share Code 所有.NET Framework Platform都擁有一些相同的類別 ie: WebRequest
但, 也都少掉某些類別 ie: WebClient 透過Conditional Compilation(編譯條件), 可以把同一份Code運用在不同的.NET Framework Platform.

8 Visual Studio 2010在Share Code的支援
Visual Studio 2010 支援Add As Link模式 可以讓兩個Project共用同一個程式原始檔

9 所以, 我們看到了很多Open Source Project出現以下的景象

10 更複雜的景象

11 Share Code is hard in .NET Platform

12 Why Share Code is hard 如果只是Namespace不同, Share Code很簡單
加上不同的類別及屬性, 還可以接受 再加上不同的Code Pattern(Sync vs Async),那事情就大條了 結論 選擇透過共享程式碼進行跨平台(Cross .NET Platform)開發, 是相當痛苦的!!

13 Re-invoke: Share Binary

14 Re-invoke: Share Binary
Write-once, Reference anywhere Silverlight Windows Phone My Library.dll XBox Windows Store Apps

15 可能嗎? 其實, .NET Framework與.NET Compact Framework曾經出現過以下的景象
MyApplication.exe

16 這是因為….. .NET Compact Framework是.NET Framework的子集 MyApplication.exe
System.Windows.Forms.Form Retargetble System .NET Framework .NET Compact Framework System.Windows.Forms.dll System.Windows.Forms.dll

17 Share Assemblies 在Visual Studio 2010, 允許程式設計師以Silverlight Class Library方式開發Library, 產出的DLL將可直接使用於Silverlight及.NET Silverlight Application Silverlight Class Library.dll .NET Framework 4 Application

18 Share Assemblies Demo

19 但…事情有時沒這麼單純

20 Portable Library Tools
Visual Studio 2010 (with Extension) Visual Studio 2012 Portable Library Tools 的目標 Share Library with Binary

21 Share Assemblies with Portable Library
Windows Phone Silverlight PortableLibrary.dll XBox Windows Store Apps

22 如何辦到的? 收集所有平台可使用的Namespace,Class 形成另一組.NET Framework subset(metadata only) 借助.NET Framework與.NET Compact Framework時代就留下來的Retargetble(assemblies mapping and class forward)設計 Feature .NET Silverlight Windows Phone Xbox 360 Core BCL Yes Core XML Core HTTP - WCF Client MEF

23 如何取得 Visual Studio 2012 Visual Studio 2010 內建
透過Extension Manager(擴充管理員)安裝

24 Migrating Picasa Client To Portable Library
Demo

25 建立Portable Library

26 Picasa Client for Windows Phone
Porting Source code The Project Structure Run & Demo Project 說明 PicasaLib 包含連結至Picasa的API實作程式碼 PicasaClient Windows Phone 程式

27 Porting Picasa Client Library
(Portable With Windows Runtime) WebClient 不存在於 Windows Runtime 使用WebRequest/WebResponse System.Threading.Thread不存在於Windows Runtime 使用ThreadPool Thread.Sleep不存在於Windows Runtime 使用ManualResetEvent.WaitOne Stream.Close 使用Stream.Dispose

28 Using Picasa Client Portable Library
Windows Phone Demo

29 Using Picasa Client Portable Library
Windows Store App Demo

30 Preparing Writing Portable ViewModel
在MVVM的設計準則下, ViewModel裡面包含許多商業及UI邏輯 可以把ViewModel寫成Portable Library嗎? Portable Library支援MVVM需要的兩個主要類別 ObservableCollection<T> ICommand 必須面臨的挑戰 ObservableCollection的部分操作必須在UI Thread完成 Deployment.Current.Dispatcher.BeginInvoke -> SynchronizationContext.Post ViewModel中需要小量與UI結合的程式碼

31 Starting Writing Portable ViewModel
守則1-不要嘗試把ViewModel完全改寫為Portable Library 善用繼承來最大化可重用部分 ViewModelBase ViewModel (WindowsPhone) ViewModel (Windows Store Apps)

32 Using Picasa ViewModel Portable Library
Windows Phone Demo

33 Using Picasa ViewModel Portable Library
Windows Store App Demo

34 Porting WCF Client Creating WCF Service
Generate WCF Client Proxy in Portable Libary WCF Proxy (Portable Library) Windows Phone Client Windows Store Apps Client

35 Using WCF Client Portable Library
Windows Phone Demo

36 Using WCF Client Portable Library
Windows Store App Demo

37 深入Portable Library架構 Portable Library與Non Portable Library的差異
Windows Store Apps .NET Framework 4.5 Portable Library

38 Portable Library依賴的 關鍵設計-Retargetable
從.NET Compact Framework時代就存在的Retargetable Flags 在Windows Store App中, mscorlib會被retarget 為System.Runtime 在.NET Framework 4.5中, mscorlib會被retarget 為mscorlib 4.0 在Windows Phone中, mscorlib會被retarget為mscorlib Portable Library的Retarget特性, 會讓其所使用的參考在不同的.NET Runtime被重新對應

39 .NET Framework 4.5與Windows Runtime
另一個關鍵的設計 .class extern forwarder System.Runtime(Windows Store Apps)與mscorlib(.NET Framework 4.5)

40 深入.NET Framework 4.5與Windows Runtime
在Windows Runtime中, System.Runtime取代了原本mscorlib的地位 但事實上, System.Runtime多數的類別宣告都是.class extern forwarder 這意味著, System.Runtime其實會串連回mscorlib 當使用System.Text.StringBuilder(System.Runtime),就是使用System.Text.StringBuilder(mscorlib) App StringBuilder (System.Runtime) StringBuilder (mscorlib)

41 另一段Retarget 旅程- ICommand
Portable Library(System.Windows.dll) .NET Framework 4.5 (System.ObjectModel.dll) .NET Framework 4.5 (System..dll)

42 但, 有一個問題 Retargetable的對象是Assembly,class forward的對象是類別
但是….ThreadPool類別並不存在於Windows Store Apps(Windows Runtime)啊?

43 ThreadPool的秘密 System.Runtime多數的類別都forward回mscorlib
ThreadPool宣告於mscorlib(.NET Framework 4.5) 因此, 撰寫Windows Store App時(Managed), mscorlib是隱含式的參考 雖然Windows Store Apps中沒有ThreadPool的設計, 但隱含的mscorlib有, Windows Runtime會直接使用mscrolib中的ThreadPool 簡單的說, Windows Store Apps中只是因為安全性元素,不讓程式設計師使用ThreadPool及部分定義於mscorlib中的類別, 並不是完全不能使用,透過適當的forward定義, 就可使用到這些類別

44 透過Reflection來證明

45 要注意的事 Windows Runtime會check可以與不可以呼叫的API
所以上例是無法透過Invoke來喚起File.Exists的, 因為會被擋下來

46 該把誰變成Portable Library
非UI的邏輯程式碼(Model) 部分UI的邏輯程式碼(View Model Base) 與WCF/REST 溝通的程式碼(WCF Proxy Client)

47 注意事項 Visual Studio 2010 Portable Library Template已經參考了所有可通用的 Assemblies,不要自行添加其它參考

48 黑之章-自製Portable Library

49 講在前頭的話 自製Portable Library無法通過WACK檢測 也就是說無法上架至Windows Store
以下內容純屬研究性質, 目的在於讓大家了解Portable Library與Windows Metadata設計的真實面 要證實我講的是真的, 不是呼巄大家哦 ^_^

50 必須擁有的知識與工具 得看得懂簡單的IL Code ILASM與ILDASM

51 開始吧 找到對的Assembly File.IO.Exists定義於mscorlib(.NET Framework 4.5)
找到對的Portable Library(mscorlib) 使用ILDASM找尋對應碼 使用ILDASM反組譯Portable Library(mscorlib) 添加 IL Code 使用ILASM編譯 取代原本的Portable Library(mscorlib)

52 自製Portable Library Demo

53 關於COM Object Windows Store Apps不允許存取COM Object 如何解決呢?
Windows RT版本不允許自訂COM存在 存取COM Object有一定的風險 如何解決呢? 使用自訂的Portable Library 使用Windows Runtime Component(C++)

54 注意 必須先知道的事 那還有用嗎? 存取COM Object代表著無法通過WACK檢測 無法上架至Windows Store
Windows 8 Enterprise支援LOB應用程式,可不用通過WACK檢測及由Windows Store安裝

55 開始吧 自訂Portable Library,添加Type.GetTypeFromGuid函式
添加<APPNAME>.manifest 加入引用COM定義 添加COM至Application Package 使用Side-by-Side COM Object 測試

56 立即啟動!免費開發人員帳戶!! Windows Store / Windows Azure / Windows Phone
擁有 MSDN 訂閱 「取得代碼」後進行註冊 優惠內容: Windows Store / Windows Phone – 啟用後12個月, 完全免費! Windows Azure – 訂閱期間, 每月固定的免費使用量!

57

58


Download ppt "OSP201 多平台類別函式庫開發實戰 黃忠成 技術總監 黃忠成資訊工作室."

Similar presentations


Ads by Google