XAML in Xamarin.Forms 基礎篇 電子書

特別說明

2017/11/12

Xamarin.Forms / .NET Standard 體驗之旅 1 : 使用 Prism Template Pack 2.0 與 .NET Stardard 標準類別庫之建立 Xamarin.Forms App 搶先體驗

在今天,2017/11/12,Prism Template Pack 推出 2.0 版本,在這個新的版本所建立出來的 Xamarin.Forms 專案,將會使用 .NET Standard 標準類別庫來取代原先使用的 PCL Portable Class Library 可攜式類別庫,可是,當替換掉舊有的PCL類別庫,對於我們在開發 Xamarin.Forms 專案上會有甚麼新問題會發生呢?
在這裡,我們將實際使用 Prism Template Pack 2.0 的專案樣板,實際建立一個 Xamarin.Forms 專案,並且在這個專案中實作出各種頁面導航的應用,看看會有甚麼樣的變化。

升級 Prism Template Pack

首先,我們先要把您的 Visual Studio 2017 的 Prism Template Pack 擴充功能進行升級到 2.0 版本。
在這裡要特別注意, Prism Template Pack 2.0 版本將會僅僅支援 Visual Studio 2017,若您使用別的 Visual Studio 版本,您可以忽略掉這篇文章。
請確認您的 Prism Template Pack 已經升級了2.0版本
Prism Template Pack 2.0

使用 Prism Template Pack 2.0 建立 Xamarin.Forms 專案

  • 打開 Visual Studio 2017
  • 從功能表中選取 [檔案] > [新增] > [專案]
  • 在 [新增專案] 對話窗中,選擇 [已安裝] > [Visual C#] > [Prism] > [Prism Blank App (Xamarin.Forms)]
  • 在名稱欄位輸入 MyPrismPack2
    Prism Template Pack 2.0 New Project
  • 在 [PRISM PROJECT WIZARD] 對話窗中,勾選您要建立的跨平台類型,接著在 [Container] 容器下拉選單中,選擇 [Unity] 這個項目,最後,點選 [CREATE PROJECT]
    Prism 支援不同的 DI 套件,因此,您可以選擇您喜歡與常用的相依性注入套件名稱。
    Prism Template Pack 2.0 New Project
  • 稍微等候一段時間,這個 Xamarin 專案將會建立成功
  • 首先,我們來查看 MyPrismPack2 這個專案的屬性,使用滑鼠右擊這個專案,選擇 [屬性] 選項,您會看到類似下圖的畫面,表示這個專案真的是使用 .NET Standard 2.0 作為目標 Framework
    查看專案屬性
    同時,您也會從方案總管中看到了 MyProjectPack2 專案的相依性節點,有看到黃色警告圖示,而您可以從 Visual Studio 2017 [錯誤清單] 視窗中看到這兩個錯誤訊息,不過,在這裡我們可以暫時忽略掉這兩個警告訊息,因為,在您開發 Xamarin.Forms 跨平台專案的過程中,這兩個警告訊息,是不會對您造成任何問題的。
    一些警告訊息
NU1701    已使用 '.NETFramework,Version=v4.6.1' 而非專案目標架構 '.NETStandard,Version=v2.0' 還原了套件 'CommonServiceLocator 1.3.0'。此套件與您的專案並非完全相容。    MyPrismPack2    D:\Vulcan\Projects\MyPrismPack2\MyPrismPack2\MyPrismPack2\MyPrismPack2.csproj        

NU1701    已使用 '.NETFramework,Version=v4.6.1' 而非專案目標架構 '.NETStandard,Version=v2.0' 還原了套件 'Unity 4.0.1'。此套件與您的專案並非完全相容。    MyPrismPack2    D:\Vulcan\Projects\MyPrismPack2\MyPrismPack2\MyPrismPack2\MyPrismPack2.csproj

建置與測試

  • 滑鼠右擊專案節點 MyPrismPack2.Android,選擇 [建置] 選項,若建置成功,將會看到底下訊息輸出。
正在還原 NuGet 封裝...
為避免 NuGet 在建置期間還原封裝,請開啟 [Visual Studio 選項] 對話方塊,並按一下 [封裝管理員] 節點,然後取消核取 [允許 NuGet 在建置期間下載遺漏的封裝]。
1>------ 已開始建置: 專案: MyPrismPack2, 組態: Debug Any CPU ------
1>D:\Vulcan\Projects\MyPrismPack2\MyPrismPack2\MyPrismPack2\MyPrismPack2.csproj : warning NU1701: 已使用 '.NETFramework,Version=v4.6.1' 而非專案目標架構 '.NETStandard,Version=v2.0' 還原了套件 'CommonServiceLocator 1.3.0'。此套件與您的專案並非完全相容。
1>D:\Vulcan\Projects\MyPrismPack2\MyPrismPack2\MyPrismPack2\MyPrismPack2.csproj : warning NU1701: 已使用 '.NETFramework,Version=v4.6.1' 而非專案目標架構 '.NETStandard,Version=v2.0' 還原了套件 'Unity 4.0.1'。此套件與您的專案並非完全相容。
1>MyPrismPack2 -> D:\Vulcan\Projects\MyPrismPack2\MyPrismPack2\MyPrismPack2\bin\Debug\netstandard2.0\MyPrismPack2.dll
1>專案 "MyPrismPack2.csproj" 建置完成。
2>------ 已開始建置: 專案: MyPrismPack2.Android, 組態: Debug Any CPU ------
2>  MyPrismPack2.Android -> D:\Vulcan\Projects\MyPrismPack2\MyPrismPack2\MyPrismPack2.Android\bin\Debug\MyPrismPack2.Android.dll
2>  沒有辦法解決 "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 和 "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" 之間的衝突。任意選擇 "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"。
========== 建置: 2 成功、0 失敗、0 最新、0 略過 ==========
  • 設定這個 MyPrismPack2.Android 專案為預設起始專案,並且開始執行這個專案,我們將會看到這個專案是可以順利執行的。
    .NET Standard 之 Xamarin.Android 執行結果

進行建立其他功能

接下來,我們會在這個專案建立兩個頁面,一個是 ListPage 另外一個是 Detail Page,我們將會模擬一個清單頁面 CRUD 簡單應用,看看這樣我們平常在實作開發 Xamarin.Forms 專案功能,在現在更換成 .NET Standard 2.0 之後,會不會有甚麼變化?
採用 .NET Standard 之 Xamarin.Android
採用 .NET Standard 之 Xamarin.Android
採用 .NET Standard 之 Xamarin.Android

使用.NET Standard開發 Xamarin.Forms App的測試過程

使用 Prism Template Pack 2.0 的心得

  • 由於 Prism Template Pack 2.0 擴充功能僅能夠在 Visual Studio 2017 上安裝,因此,想要使用這個功能的,必須要使用 Visual Studio 2017
  • Prism Template Pack 2.0 的共用類別庫已經轉換成為 .NET Standard 標準類別庫,因此,對於之前在 PCL 上可以使用的相關第三方套件,強烈建議您需要先行做些測試,確保這些尚未支援 .NET Standard 的第三方套件,可以正常於這個開發環境中運行
  • 這個測試範例雖然不是有很多功能,但是,這裡包含了這些功能在 .NET Standard 下是否可以正常運作的測試。
    • Prims 開發框架的各項功能
    • MVVM 的資料綁定與開發方式
    • Fody PropertyChanged 的 NuGet 套件可以正常使用
    • 頁面導航的各項操作:切換頁面、傳遞參數

2 則留言:

  1. 匿名17/11/17

    請問老師有以上這個範例的 下載檔嗎 ?! 因為我用之前上課的影片,當 ListPage傳參數到 Detail Page 時,放在Navigatedto的綁定物件都綁定不會成功

    回覆刪除
  2. 請問老師這個範例是否可以貼在github,謝謝。

    回覆刪除