介紹
由於歷史原因,基於 Windows 平臺存在著大量的基於 .NetFramework 開發的 WPF 和 WinForm 相關程式,如果將這些程式全部基於 DotNetCore 3.0 重寫一遍顯然是不現實的,但是 DotNetCore 是未來發展的趨勢。所以本文透過以 WPF 為例,介紹一下如何將傳統 WPF 遷移到 DotNetCore 3.0 上。
環境
我在之前的一篇文章 DotNetCore 3.0 助力 WPF 開發 有提到過,如果想開發基於 DotNetCore 3.0 的 WPF 程式,我們需要安裝 Visual Studio 2019 和 DotNetCore 3.0 SDK,這兩個條件是必須具備的。同樣的,我們做框架遷移,這兩個條件同樣也是必須的。
註:為了不必要的麻煩,建議使用 Visual Studio 2019 來進行遷移工作。
實驗
首先,我們透過 Visual Studio 2019 建立一個傳統的基於 .NetFramework 的 WPF 程式。如下圖所示:
專案建立完成之後,你會發現還是那個屬性的味道,沒有什麼變化。嘗試編譯執行,也是沒什麼問題。
更新 NuGet
在做遷移之前,我們需要確認一下我們的專案是否取用了 NuGet 上的一些包,如果取用了,請務必更新至最新版本。雖然這不是必須的,但是卻是有必要的,避免在遷移過程中出現一些未知錯誤。
這裡,我取用一下 Newtonsoft.Json 作為示例。在 MainWindow.xaml.cs 中嘗試使用
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
protected override void OnContentRendered(EventArgs e)
{
var user = new User { Name = "hippieZhou", Eamil = "hippiezhou@outlook.com" };
var json = Newtonsoft.Json.JsonConvert.SerializeObject(user);
Trace.WriteLine(json);
base.OnContentRendered(e);
}
}
public class User
{
public string Name { get; set; }
public string Eamil { get; set; }
}
編譯執行程式,可以正常編譯執行和執行。控制檯也輸出了 User 物件也能正確序列化。
使用 Portability Analyzer
.NET Portability Analyzer 工具是用於檢測我們當前的 WPF 程式中使用的所有 API 是否支援遷移到 DotNetCore 3.0 上。執行該工具後如下圖所示:
點選 Browser 按鈕,將我們的專案目錄載入進來,之後點選 Analyze,等分享完成之後,點選 Open Report即可檢視檢測結果,如下圖所示:
從上圖中,我們可以看到,我們的程式當前的框架為 .NetFramework 4.7.2,當前使用的程式集 在 DotNetCore 3.0 受支援率為 100%,這就表明我們的程式可以無縫遷移到 DotNetCore 上了。
遷移 packages.config
如果我們的程式取用了 NuGet 上的包,那麼 VS 會為我們建立一個 packages.config,這個檔案在 DotNetCore 中不受支援,所以我們需要將它修改為受支援的型別。
滑鼠右鍵它,然後點選 Migrate packages.config to PackageReference 即可,如下圖所示:
遷移 XXX.csproj
這裡,我們修改我們示例程式中的 WpfApp1.csproj,在傳統的 .csproj 中會有一大堆配置,這些配置方式在 DotNetCore 中同樣不適用了。因此,我們需要將我們的內容修改一下,如下所示:
"Microsoft.NET.Sdk.WindowsDesktop"
>
WinExe
netcoreapp3.0
true
“Newtonsoft.Json” Version=“12.0.1” />
重新載入專案後,會如下圖所示:
接著,我們需要刪除掉專案中的 Properties,操作完畢後嘗試重新編譯執行,如果不出意外的話,應該是可以正常執行的。
最後,我們可以對比一下這種遷移後的專案結構和直接透過 DotNetCore 建立的專案結構之間的差別,如下圖所示:
總結
需要補充的一點是,目前在 VS2019 中建立 DotNetCore 3.0 的 WPF 專案時, XAML 的設計檢視還是不可用的狀態,所以這個需要註意一下。
DotNetCore 是未來發展的趨勢,由於目前還是預覽版,所以我們可以先試著做一些技術儲備,等待正式版出來後,我們就可以很快的遷移過來。
相關參考
- getting-started-net-core-3-create-wpf-application
- how-to-port-desktop-applications-to-net-core-3-0
- are-your-windows-forms-and-wpf-applications-ready-for-net-core-3-0
- Prerequisites for .NET Core on Windows
原文地址:https://www.cnblogs.com/hippieZhou/p/10661181.html
朋友會在“發現-看一看”看到你“在看”的內容