將Xamarin的PCL專案升級轉換為.NET Standard Library

將Xamarin的PCL專案升級轉換為.NET Standard Library

Xamarin develop platforms

.NET Standard 是微軟在解決 .NET 跨平台時基礎程式庫不一致的問題。而最近剛好在學習 Xamarin 的跨平台開發,就研究了一下如何使用 .NET Standard,結果發現,目前 Visual Studio 2015 還不能直接開 .NET Standard 的專案,需要一些步驟才能使用,這篇讓我們快速瞭解一下 .NET Standard 2.0 還有如何在 Xamarin 專案使用它 。

簡介 .NET Standard 2.0

dotnet-current-std
(圖一, From MSDN blog)

開發者只專注單一平台,那麼可以無視 Base Libraries 的差異。但如果被要求開發跨平台系統,這需要一、搞懂不同平台的差異,二、提高「跨平台共同程式庫/元件」開發的難度。(程式碼之中,必須出現一推 #if NETCORE … #elif XAMARIN … #endif 的噁心程式碼),那怕再小的差異,都能讓你搞的你一個頭二個大。這種現像在跨平台主推的 PCL (Portable Class Library) 尤其明顯。

dotnetstd2
(圖二, From MSDN blog)

從圖二中看得出來,.NET Standard 嘗試整合原有的 Base Class Library、Core Library、Mono Class Library,希望 One library to rule them all。撰文當下 .NET Standard 最新版本為 1.6.1,整體開發進度請參考 .NET 標準程式庫 文件:

平台名稱 Alias
.NET Standard netstandard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET 核心 netcoreapp 1.0 vNext
.NET Framework net 4.5 4.5.1 4.6 4.6.1 4.6.2 vNext 4.6.1
Mono/Xamarin 平台 vNext
通用 Windows 平台 uap 10.0 vNext
Windows win 8.0 8.1
Windows Phone wpa 8.1
Windows Phone Silverlight wp 8.0

注意有數字的地方。.NET Standard 的版本越大,支援的平台越少。Windows Phone 8.1 僅支援 .NET Standard 1.0 - 1.2。Universal Windows Platform 則是由 .NET Standard 1.4 - 起跳。目前火紅的 .NET Core 則需要請選擇 .NET Standard 1.6 之後版本。唯一注意的是 .NET Standard 1.5 對應 .NET Framework 4.6.2,但 .NET Standard 2.0 時僅支援 .NET Framework 4.6.1。

轉換 Xamarin PCL 至 .NET Standard 1.4

事前準備:

使用 Visual Studio 2015 建立新 Xamarin 專案:New Project → Templates → Visual C# → Cross-Platform → Blank App (Xamarin.Forms Portable)。

在 Portable 專案點選 Properties (屬性),可以看到下圖:

PCL 專案屬性

如果直接點選「Target .NET Platform Standard」並按「是(Y)」會看到一個「NuGet 3.0」的錯誤訊息,訊息也很清楚說明:「Please uninstall all NuGet packages and try again.」。

NuGet 3.0 錯誤

開啟 Portable 專案的套件管理員,將預設的 Xamarin.Forms 套件進行 Uninstall 動作。移除後的 References 相當乾淨。

uninstall Xamarin.Forms - PCL References

回到專案 Properties (屬性)頁面,再重覆一次點選「Target .NET Platform Standard」並按「是(Y)」的動作,這時專案會被 unload 並重新載入(它在修改 .csproj):

PCL use .NET Standard

到這裡已經算是轉換完成。

重新安裝 Xamarin.Forms 套件

依照前面 .NET Standard 的資訊,讓我們先指定為 .NET Standard 1.4,這樣就能對應、Xamarin.iOS、Xamarin.Android、Universal Windows Platform 等主要開發平台與最相容的 .NET Framework 4.6.1。

在重新安裝 Xamarin.Forms 會得到一個錯誤訊息,這裡需要手動修改一下 project.json 檔案:

{
   "supports": {},
   "dependencies": {
     "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
     "NETStandard.Library": "1.6.0"
   },
   "frameworks": {
     "netstandard1.4": {}
   }
 }
 

修改 netstandard1.4 段落:

"frameworks": {
   "netstandard1.4": {
     "imports": "portable-net45+wpa81+wp8+win8"
   }
 }
 

指定值參考 Portable Class Library (PCL) profilesimports 是跟 NuGet 說明相容性(TFM,Target Framework Monikers),因為 Xamarin.Forms 套件撰文當下還沒更新為 .NET Standard 的版本,所以無法直接參考使用。

完成之後,最好做一次清除方案(Clean Solution)並重新建置。

系列文章:

參考資料

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。