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

Slides:



Advertisements
Similar presentations
跨平台移动开发框架比较 How many mobile platforms android 拥有最多的 developer. 开发语言-大众脸- java 开发成本最低,不用单独买一台电脑. 开发者账号-免费 发布应用很快-当天提交,当天就能发布 iOS 贵族平台-至少把自己包装的很高大上.
Advertisements

硕士论文开题报告 煤炭企业物流信息系统的 研究与设计 指导老师: 学生姓名: 学 号:
学生教育办介绍 2015年9月.
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
第一章 認識 Visual Basic 本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載
使用者經驗 - User Experiences 台灣微軟 吳典璋 Dann Wu
Proteus虚拟仿真.
面向对象程序设计 (Visual C# .NET)
大学生如何进行职业生涯发展规划及有效应聘 厚积薄发
一、登录界面 (一)登录方式 1、访问广东工程咨询网 ( 动态里,“咨询师登记工作”专栏 2、 IE地址栏中直接键入管理系统 地址(
利用LoadRunner进行 性能测试.
九思易自动化软件 ControlEase Automation Software
Topics 應用架構 學習路徑 熱門議題 相關認證.
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
第ㄧ章 認識 VB 2008 與主控台應用程式 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
Microsoft Application Platform 開發技術導引
Microsoft .NET 第4組 十月15, 2002 B 陳東傑 B 蔣佳勳
RIA 程式設計 主講人:彭震榮.
Asp.net 基礎.
Symbian OS介绍 概述 第一部分.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Arena System Technology Architecture 系统技术架构 1、Database V2(Lotus Notes)V3(Oracle8i) 2、Application Server SilverStream2.53 (Java as server side programming.
淺談Visual C# 程式設計 國立台灣師大附中 李啟龍 Jason.
Android程式開發準備 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
Introduction on Smartphone Platform
手機作業系統介紹.
南华大学计算机学院 软件工程系 QQ讨论群:
.NET 簡介.
建置、升級與轉換您的資料庫 - Data Tier Applications
.NET 簡介.
具備可攜性及通話品質量測功能之軟體電話架構設計與實作
第1章 .NET与C# 为什么要设计一门新的编程语言? C#在微软的.Net平台中占据什么样的地位?
BizTalk Server 2004.
Working with Databases (II) 靜宜大學資管系 楊子青
九思易自动化软件 ControlEase Automation Software
桌面環境簡介及IDE開發工具 Outline (一)什麼是Linux? (二)桌面環境系統簡介 (三)IDE開發工具.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
R教學 安裝RStudio 羅琪老師.
Native Development Kit
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
立即啟動!免費開發人員帳戶!! Windows Store / Windows Azure / Windows Phone
CHT IPv6測試 D-Link Taiwan 友訊科技台灣分公司 TTSS 電信技術支援課 Name:
[作品名称] 方案计划书 [SaaS / Apps 名称: ] [提交人:公司名称、姓名、手机、邮箱 ]
SVR 352 扩展Windows Server 终端服务在企业中的应用
Topic Introduction—RMI
Android智慧型手機程式設計實務應用班
Ch20. 計算器 (Mac 版本).
微软云计算 --Windows Azure platform
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
第 19 章 XML記憶體執行模式.
爱心志愿者服务系统 操作指引 设计:东莞市爱心志愿者协会 网络中心 胡连甲 技术支持电话与微信:
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
DEV 343 VS2005超快速开发方案/EEP2006控件包.
利用 EditorConfig 自訂文字編輯器設定
瞻前顧後 Windows程式開發方式的重要演進
函數應用(二)與自定函數.
DEV 343 VS2005超快速开发方案/EEP2006控件包.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
IT DNA- 微軟MVP、資深IT人胡百敬 資訊產業全攻略!IT知識工作者聯手推薦! 資訊新鮮人》 專業資訊人》 知識工作者》
黑龙江省科学基金 项目验收填报培训 黑龙江省计算中心 2015年09月.
第三章 軟體資源管理 授課老師:褚麗絹.
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
C#快速導讀 流程控制.
Chapter 4 Multi-Threads (多執行緒).
Jquery Mobile開發須知 周季賢.
Develop and Build Drives by Visual C++ IDE
高擴充高穩定高安全 企業級資料管理平台 Report Builder概論 錢曉明 資策會 資深講師 台灣微軟 資深講師.
CHT IPv6測試 D-Link Taiwan 友訊科技台灣分公司 TTSS 電信技術支援課 Name:
Windows Workflow Foundation CON 230
Presentation transcript:

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

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

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

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

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

Share Binary is hard in .NET Platform

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

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

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

更複雜的景象

Share Code is hard in .NET Platform

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

Re-invoke: Share Binary

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

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

這是因為….. .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

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

Share Assemblies Demo

但…事情有時沒這麼單純

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

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

如何辦到的? 收集所有平台可使用的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

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

Migrating Picasa Client To Portable Library Demo

建立Portable Library

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

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

Using Picasa Client Portable Library Windows Phone Demo

Using Picasa Client Portable Library Windows Store App Demo

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結合的程式碼

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

Using Picasa ViewModel Portable Library Windows Phone Demo

Using Picasa ViewModel Portable Library Windows Store App Demo

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

Using WCF Client Portable Library Windows Phone Demo

Using WCF Client Portable Library Windows Store App Demo

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

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 2.0.5.0 Portable Library的Retarget特性, 會讓其所使用的參考在不同的.NET Runtime被重新對應

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

深入.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)

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

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

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定義, 就可使用到這些類別

透過Reflection來證明

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

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

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

黑之章-自製Portable Library

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

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

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

自製Portable Library Demo

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

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

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

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