將傳統 WPF 程序遷移到 DotNetCore 3.0


介紹

由於歷史原因,基於 Windows 平台存在着大量的基於 .NetFramework 開發的 WPFWinForm 相關程序,如果將這些程序全部基於 DotNetCore 3.0 重寫一遍顯然是不現實的,但是 DotNetCore 是未來發展的趨勢。所以本文通過以 WPF 為例,介紹一下如何將傳統 WPF 遷移到 DotNetCore 3.0 上。

環境

我在之前的一篇文章 DotNetCore 3.0 助力 WPF 開發 有提到過,如果想開發基於 DotNetCore 3.0WPF 程序,我們需要安裝 Visual Studio 2019DotNetCore 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 中同樣不適用了。因此,我們需要將我們的內容修改一下,如下所示:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
  </ItemGroup>

</Project>

重新加載項目后,會如下圖所示:

接着,我們需要刪除掉項目中的 Properties,操作完畢后嘗試重新編譯運行,如果不出意外的話,應該是可以正常執行的。

最后,我們可以對比一下這種遷移后的項目結構和直接通過 DotNetCore 創建的項目結構之間的差別,如下圖所示:

總結

需要補充的一點是,目前在 VS2019 中創建 DotNetCore 3.0 的 WPF 項目時, XAML 的設計視圖還是不可用的狀態,所以這個需要注意一下。

DotNetCore 是未來發展的趨勢,由於目前還是預覽版,所以我們可以先試着做一些技術儲備,等待正式版出來后,我們就可以很快的遷移過來。

相關參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM