昨天我們使用 Prism Template Pack 專案範本,建立了一個共用的可攜式專案,以及可分別執行於:Android、iOS、Windows 三種作業系統平台的專案,也試著可以部署到 Android 模擬器上執行,但是當想部署到 Windows 模擬器上執行時,卻發生錯誤無法執行,今天我們就來想辦法解決吧!
移除專案
將無法使用的 UWP 專案移除:
將移除的 UWP 專案的資料夾和資料夾內的檔案全部刪除,因為等一下新增加的 UWP 專案要放在這裡:
新增 UWP 專案
以 Windows 通用專案範本新增一個 UWP 專案,雖然名稱和位置可以自行決定,但是為了保持命名的一致性,所以取與剛剛刪除的專案相同的名稱,並放置於相同的位置:
為 UWP 專案安裝對應的 Nuget 套件
開啟管理方案的 NuGet 套件視窗:
依下圖所示,重複數次將遺失的 NuGet 套件安裝到 UWP 專案,需要安裝的套件有:
- CommonServiceLocator
- Prism.Core
- Prism.Forms
- Prism.Unity.Forms
- Unity
- Xamarin.Forms
為 UWP 加入可攜式專案參考
將可攜式專案加入到 UWP 專案參考:
在 UWP 專案追加與 Xamarin.Forms 關聯的程式碼
在 App.xamal.cs 檔案中如下圖所示位置加入程式碼:
Xamarin.Forms.Forms.Init(e);
接著在 MainPage.xaml 加入命名空間設定:xmlns:forms="using:Xamarin.Forms.Platform.UWP"
,並將原有的 <page></page> 改成 <forms:WindowsPage> </forms:WindowsPage> 。修改後程式代碼如下所示:
<forms:WindowsPage
x:Class="MyFirstXamarinForm.UWP.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyFirstXamarinForm.UWP"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
</Grid>
</forms:WindowsPage>
接著在 MainPage.xaml.cs 加入命名空間引用:
using Microsoft.Practices.Unity;
using Prism.Unity;
請留意,務必要將原先的 MainPage : Page
移除 :Page
並將檔案修改成如下所示:
public sealed partial class MainPage
{
public MainPage()
{
this.InitializeComponent();
LoadApplication(new MyFirstXamarinForm.App(new UwpInitializer()));
}
}
public class UwpInitializer : IPlatformInitializer
{
public void RegisterTypes(IUnityContainer container)
{
}
}
使用 Windows 模擬器測試
終於將 UWP 專案重新再建立,接著就來測試,這樣的修改是否有效。在測試之前,先更改一下內定的方案組態設定,這樣可以在測試時少按幾次鍵(少按建置和部署)。
選定 UWP 專案為要測試的專案:
選定要用來測試的模擬器的型號:
按下執行,如果沒有意外的話,修正後的 UWP 專案應該可以正常執行:
好吧!今天就到這裡,明天再來試試如何在 iOS 模擬器上執行,也希望 Prism Template Pack 的作者趕快修好這個錯誤,才不會每次開新專案時都要麻煩一次。