既然 WPF 和 WinForm 只能在 Windows 運行,為什麼要移植到 .NET Core ?
.netcore聲稱自己是跨平台的.net實現,而在其上實現的wpf和winform又不能跨平台,感覺很矛盾。
你對跨平台框架這件事情理解有偏差。
跨平台框架說的是,框架可以跨平台,而不是,必須跨平台的東西才能放進框架,也不是框架里的任何一部分都必須跨平台。Unity是跨平台的吧,但你用它來做一個Windows only的app,有人攔得住你?
其次,Xamarin很久以前曾經表態過,WPF是可以跨平台的,只是錢的問題。有人願意投入就能做成跨平台,不是技術問題。
再者,如果所有東西都遷移到.net core,就可以脫離老的.net,只需要維護一套,成本就能降低。why not。
因為這個統一.NET平台的第一步。
目前你寫一個嚴肅的C#程序,需要適配 .NET Framework、.NET Core、Mono、.NET Native等多個平台。最初這個工作只需要修改一些csproj文件就可以了,但隨著我們給CoreCLR的VM和JIT加入更多功能,適配多個平台這個工作已經大面積泄漏到了上層語言中(比如在C#中寫#if條件編譯)。要把這些新功能移植到 .NET Framework的VM/JIT里甚至比在.NET Core 中做新功能時還要麻煩(比如照顧JIT32)。所以微軟在2018年的時候就決定 .NET Framework 不再跟隨支持新的 .NET Standrad。
所以這是對用戶和 .NET開發人員有百利而無一害的事情,何樂而不為呢。
clang++也是跨平台的,但是也擋不住大家寫出了一堆linux only的代碼。道理是一樣的。
WPF也不是不能做成跨平台,但是首先你要有大量的Linux開發GUI的需求。Linux能寫GUI也是好多年了,但是大家並不喜歡,那做成跨平台意義何在?當然我覺得WPF跨平台也是遲早的事情,因為總有一天要上mAC的。
主要是能讓wpf、winform享受到.NET Core的性能優勢和新特性,現在很多新的類庫都用.NET Core寫了,.NET Core3.0有一部分新特性是用到.NET Standard 2.1,framework是不能引用了,所以這時候讓他們支持.NET Core,是非常受歡迎的~
另外,社區還有一些.NET core實現的跨平台Xaml框架,可以了解一下~
Windows平台上的應用開發,我們通常會選擇以下三個技術:
- Windows Forms
- Windows Presentation Foundation
- Universal Windows Platform (UWP)
但事實上, 你真正想瞄準的是 Windows。Windows是平台。 這些選項只是我們針對 Windows 開發應用時所擁有的不同 UI 框架選項。更重要的是, 當你優化你的應用針對 Windows 10 時, 你會得到更多的創新、Api 和 windows 10 操作系統為您提供的好處。
把 Windows 看作是一個平台。
UI 框架只是一種偏好而且, 這三個UI 框架現在都是開源的:
- Windows Presentation Foundation: https://github.com/dotnet/wpf
- Windows Forms: https://github.com/dotnet/winforms
- Windows 10 XAML: https://github.com/Microsoft/microsoft-ui-xaml
WPF 和 Windows Forms 開源都是基於.NET Core 3.0, 你肯定有疑問為什麼是 .NET Core 3. 給我個理由?
.NET Framework 4.8 已經發布,.NET 4.8 已經幫助我們解決了很多問題, WPF和Windows Forms的高DPI更好的至此,Windows 10 中最新的瀏覽器和媒體播放器的新控制項,並支持最新的標準。.NET Core 3 是 .NET Core 的下一主要版本。 這個即將發行的版本的主要特點是支持 Windows 桌面應用,包括 Windows 窗體和 WPF 應用。 你將能夠在 .NET Core 3 上運行新的和現有的 Windows 桌面應用並體驗 .NET Core 具有的所有優勢。 託管在 XAML 島中的 UWP 控制項也可在面向 .NET Core 3 的 Windows 窗體和 WPF 應用中使用。
.NET Core 的性能更好,速度更快,.NET Core的並行安裝的特性可以幫助你在發布應用程序中獲取顯而易見的方便,更好的打包方案MSIX, 開源,支持.NET Standard 2.1, 支持C# 8.0等還有很多新特性。
使用.NET Core 3 升級Windows 桌面應用開發的好處還有很多,下面簡要的列幾條:
?現代運行時、BCL 和語言功能
?更容易訪問平台和設備的API
?現代化 且可訪問的的UI和輸入
?針對 DevOps 進行無縫的應用程序部署、更新和優化
?開發人員更好進行敏捷創新
.NET Core 3.0 將在下個月發布RC, 9月份正式發布,將在11月份發布長期支持版本3.1 ,2020年 11月發布.NET 5 ,其實就是.NET Core 4.0 ,為了避免和.NET 4的混淆,以及統一.NET品牌的考慮統一叫做.NET 5,往後每年發布一個主要版本, 發布的偶數版本是LTS。
.Net真正意義上不能跨平台的也就是用到PInvoke Windows下專用的DLL的那一套東西吧,其他只要肯把底層原來對Win32依賴的那一套輪子敲出來,理論上也是可以跑到別的平台上的。
微軟要移植,其實只是看他們想不想,肯不肯出成本。別說WinForm跨平台了,微軟以後搞個Win32 on Linux都是可能的,只不過會是個巨大的工程。
記得Mac OS還不是X的時候,微軟已經搞了個Visual C++ for Mac跨平台版本(應該是97年左右,是Visual C++ 4.2的一個特殊版本)。裡面把一部分Win32 API和整個MFC都移植到那個時候的Mac OS上了,記得Mac版本的Word 6.0、Excel 5.0都是用這玩意開發出來的;當然IDE沒移植,需要在Win下寫代碼,然後用串口連接到Mac真機調試。只不過,在Mac用戶和開發者的強烈排斥下(它太微軟了),這個平台沒有能走出去多遠。
WinWorld: Visual C++ 4.x?winworldpc.com.netcore 是一個汽車製造平台, 可以不同大小的汽車.
WPF ,winform 其中的一款車
微軟跨平台是為了多賺錢,而不是學雷鋒
微軟開始跨平台是商業策略,為了搶佔伺服器市場獲得盈利。通過Azure,即使Linux伺服器也可以賺到錢。而且這部分收入已經向每年100億美元邁進,並且幾年內就會翻番。
微軟最強大的桌面開發工具只支持Windows,也是商業策略。微軟的實力做跨平台很容易,比如VSCode,但為了防止Windows的市場份額丟失而人為限制。微軟大部分收入依然都來自於Windows和辦公軟體,有著數萬億美元的市場。
而桌面跨平台最成功的Qt,估值也只有幾億美元。損害數萬億的市場,來獲取幾億的市場,顯然得不償失。在收益大於損失之前,估計WinForm和WPF並不會真正跨平台。而UWP與微軟設備綁定,跨平台就更困難了。
.NET Core 5 將要統一版本,取代Frameworks
第一次看到移植的新聞,確實感覺是多此一舉。
後來有消息,5.0將完全統一合併。原來如此。
另一個猜想,如果未來微軟壟斷了Windows和Linux開發……
會不會被拆分?比如反壟斷什麼的。或者歐洲開出千億罰單之類。
有人聽說過MONO這東西嗎?如果沒聽說過MONO,那你聽說過Xamarin公司嗎?MONO就是Xamarin公司旗下的東西,而Xamarin已經被微軟收購了。
而UNITY3D中已經在使用MONO的技術了,微軟也一直和UNITY公司保持一種曖昧的關係,包括WP7/WP8中也在使用UNITY3D的引擎。
※WPF 的設計思想先進都體現在哪些方面?
※要開發一個倉庫管理軟體,應該選擇c#(winform/wpf)還是c++(qt)?
※wpf求教導,用數據綁定,slider 和 3個radiobutton 相互聯動?
TAG:MicrosoftWindows | NET | WindowsPresentationFoundationWPF | NETCore | Winform |