.Net Core vs .Net Framework 如何為一個應用程序選擇一個運行時(翻譯)


.Net Core是下一件大事嗎?我已經使用了一段時間了,我傾向認為它是。事實上,我們推測,在2018年,對這項技術熟練的開發人員將會有巨大的需求。但是它和.Net Framework的區別是什么?你需要知道什么才能有效的使用了它們。在這篇文章中,我們會解釋主要的不同點和指導怎么確保最好的使用它們。

在以前,.Net Framework只能工作在Window設備上。Xamarin和Mono項目致力於將.Net移植到移動設備、MacOS和Linux。.Net Core提供了一套標准的基本庫讓其在windows、linux、macos、移動設備可以使用。

.Net 有下面四個部分組成:

  • Common language specification(CLS) :它定義了對象是如何實現的,因此它可以工作在任何地方,因為它跟系統平台無關。CLS是CTS(Common Type System)的子集,它設置了一種描述所以類型的通用方法。
  • Framework class library(FCL):是一個手機可重用類、接口和值類型的標准庫。
  • Common language runtime(CLR):是運行框架並管理.Net程序執行的虛擬機。
  • 像VisualStudio這樣的工具來創建獨立的應用程序、交互式網站、Web應用程序和Web服務。

.Net Core vs .Net Framework

  微軟維護的兩個運行時,它們有許多相同的API。這個共享的API就是所謂的.Net Stand.

開發者使用.Net framework去創建Window桌面應用和基礎服務應用。它包含Asp.Net web應用程序。.Net Core被用於創建服務應用讓它能運行在Windows、Linux和Mac上。它目前還不支持創建桌面應用。開發者可以在兩個運行中用VB.Net 、C#和F#編寫程序。C#是面向對象的語言。對於工作在C和其相似語言的人來說,學習曲線應該不是問題。F#是跨平台語言同時也是面向對象的語言。Visual Basic在.Net Framework中可用,在.Net Core2.0對其支持有限。

以下情況開發者應該選擇.Net Core:

.Net Core是一個跨平台的和開源的框架,它可以在任何平台開發。通常它被使用在雲應用程序或將大型企業應用程序重構為微服務。所以應該什么時候使用呢?

1、項目需要跨平台

當一個應用程序需要運行在多個平台像Windows、Linux和MacOS使用。這些操作系統已經被支持作為開發工作站(支持的操作系統正在增長)。

  • VS可以在Window上使用,並在macOS上使用新的受限版本。
  • VS Code可以使用在Window、Linux和macOS上。
  • 命令行被使用在所有被支持的平台上。

2、當使用Docker容器時

容器和微服務架構經常在一起使用。因為它是輕量級和模塊化的,.Net Core很好的工作在容器中。服務器應用可以跨平台部署到Docker容器中。.Net Framework也可以使用容器,但是鏡像太大了。

3、如果有很高的性能和可擴展系統需要

微軟推薦用.Net Core和Asp.Net Core來獲取最高的性能和拓展性。當成百個微服務被使用,這變的很重要。應該需要較少數量的服務器和虛擬機。所獲取的效率和可擴展性可以轉化為除了節約成本之外更好的用戶體驗。

4、如果你同時運行多個.Net 版本

要在.NET中以不同版本的框架安裝依賴項的應用程序,開發人員需要使用.NET Core。 可以使用不同版本的.NET在同一台服務器上運行多個服務。

5、如果想用命令行開發

一些開發人員更喜歡用輕量級的編輯器和命令行來工作。.Net Core有命令行接口已經支持所有的平台。它要求最小的安裝在生產機器上。

以下情況不適合使用.Net Core

有一個問題:.Net Core還沒有全部支持.Net 的庫和拓展。在某些情況下,它可能不是當前最好的選擇,但是,隨着持續發展,它最終可能適用於大多數用例。 考慮以下情況:

1、Windows Forms和WPF程序

是不被支持的。你不得不使用mont去制作適合macOS的.Net  桌面應用程序。

2、Asp.Net WebForms 不存在

微軟有計划實現它在ASP.NET Core。

3、你需要創建WCF服務。

.Net Core現在還不支持WCF。取而代之,你需要使用ASP.NET Core MVC創建REST API。

4、第三方庫的支持

.Net Core2.0提供了.Net Framework和.Net Core的兼容。但是仍然有類庫沒有被實現的兼容問題。盡管如此,這將有助於將許多類庫連接到.Net Core。

5、缺少.Net Framework 特性

一些.Net Framework功能在.Net Core中沒有。比如EF Core是不同EF v6的。

6、你需要訪問特定的Windows API

如果你的程序需要訪問注冊表、WMI或者其他的Window API,它是不能工作的。.Net Core被設計跟系統無關。

7、部分支持VB.NET和F#

微軟和社區再持續更新,但是還沒有全部支持。

8、SingalR 沒有被支持

它計划在.Net Core2.1中被支持.

 以下情況,開發者應該使用.Net Framework

 它可以與Docker和Window容器一起使用,並且使用它是可行的。

.Net Framework項目已經被使用。

代替遷移、替換應用程序。比如開發者可以寫一個新的web service用Asp.Net Core。

.Net Framework項目中使用了第三方類庫或者NuGet包,但在.Net Core中不可用。

.Net Core正在被廣泛的使用,如果你工作在.Net Framework類庫在.Net Core中沒有被兼容,仍然需要使用.Net Framework。NuGet是.NET和其他Microsoft開發平台的免費和開源軟件包管理器。

開發的項目中在.Net Core中還不可用

  • .Net Core還沒有全部支持.Net Framework的技術。這些包含:
  • Asp.Net Web Forms應用程序
  • Asp.Net Web Pages應用程序
  • Asp.Net SignalR 服務端/客戶端
  • WCF服務
  • 與工作流相關的服務
  • WPF和Windows Form

一些平台還沒有支持.Net Core

什么時候不用.Net Framework

下面這些情況不應該使用.Net Framework:

  • 項目需要在多個平台使用。
  • 需要高的性能和拓展性。
  •  項目必須使用開源框架

怎樣從.Net Framework移植到.Net Core上

1、分析第三方依賴

 這設計到的不僅僅是知道第三方依賴關系是什么。如果要用程序運行在.Net Core上,應該如何依賴那些第三方依賴福關系,以及如果他們不運行,需要知道該應用程序需要做什么。

NuGet軟件包很容易檢查,因為它通常在NuGet的網站上有描述依賴,並且軟件包為每個平台都有一組文件夾。 您還可以查看該包的頁面上的依賴關系,然后查找具有以下任一名稱的文件夾或條目。

如果依賴關系不是NuGet包,則ApiPort工具可以檢查依賴關系的可移植性。

與.NET Core 2.0一起使用的新功能,兼容性可以引用尚未轉換為使用.NET Standard的.NET Framework軟件包。 請確保徹底測試這些軟件包,因為如果他們使用不受支持的API,它們可能仍然存在問題。

2、標准庫的目標

.NET標准庫旨在用於所有.NET運行時,因此定位.NET標准庫是構建跨平台類庫的最佳方式。

有八個平台可以在不同程度上提供多個版本。 如果項目的目標版本較低,則無法引用以較高版本為目標的項目。 選擇所有項目中使用的最低.NET標准版本。 下面是每個.NET標准版本的圖表,顯示了它們運行的特定區域:

3、重新調整項目

所有要移植的項目都需要針對.NET Framework 4.6.2。 這將確保用於.NET Framework特定目標的API替代品可用於不受支持的API。這可以在Visual Studio中用“Target Framework”命令輕松完成並重新編譯這些項目。

 文章翻譯來源為.NET Core vs .NET Framework: How to Pick a .NET Runtime for an Application


免責聲明!

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



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