遷移桌面程式到MS Store(5)——.NET Standard

来源:https://www.cnblogs.com/manupstairs/archive/2019/01/07/10236601.html
-Advertisement-
Play Games

接下來的幾篇,我想討論下遷移桌面程式到MS Store,可以採用的比較常見、通用性比較強的實施步驟和分層架構。 通常商業項目一般都是不斷的迭代,不太可能突然停止更新現有的桌面版本,然後花很長時間從頭來寫UWP版本,所以我建議將遷移的過程分階段,通過幾個版本的迭代,慢慢地從傳統桌面程式,轉變成一個可以 ...


  接下來的幾篇,我想討論下遷移桌面程式到MS Store,可以採用的比較常見、通用性比較強的實施步驟和分層架構。
  通常商業項目一般都是不斷的迭代,不太可能突然停止更新現有的桌面版本,然後花很長時間從頭來寫UWP版本,所以我建議將遷移的過程分階段,通過幾個版本的迭代,慢慢地從傳統桌面程式,轉變成一個可以通過MS Store審核的APPX程式。至於之後要不要變成真·UWP可以視市場反饋決定。
  假設現有的桌面程式包含一個MainUI的WPF工程,多個.NET Framework 4.5的類庫,以及一個C++編寫的後臺服務,以Windows Service的形式運行。之所以假設存在一個C++的Service,是考慮有些桌面程式要和硬體打交道,只有C語言版本的API。或者需要調用公司自己的通用類庫,通常是C或C++寫的跨平臺版本。
  我推薦第一步,也是最簡單的一步從.NET Framework類庫著手改起。第一階段的目標是將.NET Frramwork 4.5的類庫,轉換成.NET Standard 2.0版本的類庫。

  

  這裡要著重介紹一下.NET Standard。MSDN上對於.NET Standard的解釋雖然每個字都認識,可把這些字連成句子,讀起來就不太容易看懂。
  https://docs.microsoft.com/zh-cn/dotnet/standard/net-standard
  總而言之呢,就是一個Class Library(.NET Standard),它既可以被WPF工程引用,也可以被UWP工程引用,同時還可以被.NET Core的工程引用。
  在我們的例子中,因為我們的MainUI仍然是WPF的工程,所以不能直接將.NET Framework 4.5的Class Library轉換成Universal Windows版本。同時我們又需要對未來可能存在的UWP版本提供支持,那麼.NET Standard就是最佳的選擇。
  在這種情況下,我們甚至可以在保留WPF的MainUI以支持Win 7(該死的老古董)的同時,新建一個UWP的UI工程來支持Win10。二者共用同一份的.NET Standard的Class Library。
  可能有些同學會問,同樣一個C#的Class Library,為什麼會有.NET Framework,Universal Windows,.NET Core和.NET Standard四種類型。下麵我們來簡單介紹以上幾個概念,這些拗口的名稱得感謝某軟改名部八輩子祖宗,順便問下還招人不?
  .NET Framework最為好懂,從2000年左右的.NET 1.0開始,現今已經發展到.NET 4.7.2。你說4.5以後怎麼光升小版本號啊?啥時候出.NET 5啊?我說孩子你別傻了,.NET 5不就是.NET Core嘛?
  .NET Core,個人理解就是為了跨平臺,重寫的.NET Framework,也同樣是為了跨平臺,所以現階段主打ASP.NET Core,而和Windows緊密結合的WPF,Winform,甚至UWP都是暫不支持的。畢竟在短時間內,重新寫一份包含.NET 4.7.2所有功能的.NET Core不太現實。也沒有迫切的需要。從GitHub的roadmap看,至少要到3.0版本才會支持UWP及桌面開發。
  https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications

  

  Universal Windows class library就比較尷尬了,作為Win8那時候的Windows Runtime portable class library的Win10升級版。技術是好技術,可惜沒趕上好時候。Win8和WP8的口碑不行,連累了Win10。簡而言之就是給所有UWP程式用的class library。
  .NET Standard則是Universal Windows Class Library的跨平臺再升級版。最終的大一統,今日的主角。

  

  上面這個表格看上去內容很多,實際我們僅僅需要看最後一列,使用最新的.NET Standard 2.0就可以了。拋去和我們遷移桌面程式關係不大的Mono,Xamarion和Unity,實際我們可以看到從.NET 4.6.1開始就已經支持.NET Standard 2.0了。從Windows 10版本來看的話,RS3的16299也已經是非常普及的版本了。
  升級到.NET Standard的好處非常明顯,.NET Standard版本的類庫可以在.NET Framework,UWP和.NET Core 之間共用,同時面向未來的升級做到無縫銜接。
  本著先易後難,循序漸進的原則,這一篇我們先討論了什麼是.NET Standard,以及升級的目的和意義。下一篇我們會介紹在升級.NET Framework到.NET Standard的過程中,可以使用的相容性檢測工具The .NET Portability Analyzer。順便在展望一下.NET Core 3.0,一邊寫代碼一邊吹吹水,體驗雙倍的快樂!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、編寫一個簡單程式,要求數組長度為5,分別賦值10,20,30,40,50,在控制台輸出該數組的值。 package com.test; public class t01 { public static void main(String[] args) { // 靜態初始化 int i[] = n ...
  • 前言: 由於導師在我的畢設項目裡加了消息系統(本來想水水就過的..),沒辦法...來稍微研究研究吧..簡單簡單... 需求分析 我的畢設是一個博客系統 ,類似於簡書這樣的,所以消息系統也類似,在用戶的消息里包含了有:喜歡和贊、評論、關註、私信這樣的一類東西,這樣的一個系統應該包含以下的功能: 1. ...
  • 由於 Apache公司發現myBatis的分頁弊端,所以又研發出得補丁:PageHelper 中央倉庫5.1.2版連接地址: <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --><dependency ...
  • 變數 什麼是變數 變數就是變化的量,變就是變化,量用於衡量描述對象的狀態 為什麼要有變數 程式執行的本質就是一系列狀態的變化,變是程式執行的直接體現,所以我們需要有一種機制能夠反映或者說是保存下來程式執行時狀態以及狀態的變化。 變數的定義規範 #1.變數名只能是字母、數字或下劃線的組合 #2.變數名 ...
  • 寫在前面 從今天開始的幾篇文章,我將就國內目前比較主流的一些線上學習平臺數據進行抓取,如果時間充足的情況下,會對他們進行一些簡單的分析,好了,平臺大概有 ,`CSDN學院 網易雲課堂 慕課網 mongodb`裡面,如果對上述平臺造成了困擾,請見諒,畢竟我就抓取那麼一小會的時間,不會對伺服器有任何影響 ...
  • Django 系列博客(三) 前言 本篇博客介紹 django 的前後端交互及如何處理 get 請求和 post 請求。 get 請求 get請求是單純的請求一個頁面資源,一般不建議進行賬號信息的傳輸。 配置路由 配置視圖 配置頁面資源 post 請求 配置路由 配置視圖 配置頁面資源 前後端交互 ...
  • Kubernetes簡介 Kubernetes是Google基於Borg開源的容器編排調度引擎,作為CNCF(Cloud Native Computing Foundation)最重要的組件之一,它的目標不僅僅是一個編排系統,而是提供一個規範,可以讓你來描述集群的架構,定義服務的最終狀態,Kuber ...
  • 本文通過一張圖來看一下路由的配置以及請求處理的機制。(ASP.NET Core 系列目錄) 一、概述 路由主要有兩個主要功能: 這兩個功能看起來這兩個是相反的。 A.路由的配置 路由的兩個功能都離不開一個基本的操作:路由的基本配置。在Startup中預設通過 routes.MapRoute(name ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...