擁抱.NET Core,學習.NET Core的基礎知識補遺


前言

.NET Core的新特性之一就是跨平台,但由於對之前框架的兼容導致編寫一個.NET Core類庫變得相當復雜,主要體現為相當多的框架目標和支持平台,今天我們就對.NET Core的跨平台特性進行一次梳理。

在.NET Core之前

其實早在.NET Core之前微軟就有推出.NET的跨平台方案,不過這次的跨平台指的不是Linux、OSX,而是微軟自家的平台,如:NET、Silverlight、Windows8、Windows8.1、Windows Phone。

這個階段微軟將它稱作為:可移植類庫

下面是可移植類庫的配置界面

image

在這個階段.NET開發就出現了分歧,類庫項目也分成了兩個:類庫、可移植類庫。

image

從理論上來說,可移植類庫由於類庫,因為它是真正意義上的統一類庫,但現實情況是大部分開發人員都選擇使用類庫而不是可移植類庫。

然而困難從此就開始生根(如果微軟之前統一了這兩個項目現在的情況或許會好很多)。

在.NET Core起步

第一階段(Project K)

KRE(K Runtime Environment)

KVM(K Version Manager)

KPM(K Package Manager)

K / KLR(K runtime / K language runtime (not sure))

這個階段到還好,很多東西剛接觸.NET Core的人可能根本沒有聽過,因為早早的被廢棄,所以影響不是很大。

第二階段(DNX)

DNX451

DNXCORE50

到這個階段微軟和一些第三方已經開始着手進行支持了。

第三階段(DOTNET5.0)

dotnet5.4

dotnet50

暢言

由此可以看到微軟改名部的強大。這里不是在摒棄開發團隊,而是這些動作為之后留下了復雜知識體系。

因為這個階段.NET Core已經發展了很長時間,也有很多第三方開始編寫支持的組件,為以后的兼容留下了隱患。

.NET Core 1.0

在這個版本微軟真正確定了.NET Core(netcoreapp)的命名,並推出了.NET Platform Standard(netstandard .NET標准)。

.NET Core兼容.NET Platform Standard1.6(netstandard .16)。

從此統一了開發模型,開發類庫時不在需要關心項目模型,因為.NET Core支持全平台。

但為了兼容,Visual Studio還是保留了類庫、可移植類庫的項目模板。但推薦大家以后都使用.NET Core的類庫項目模版進行組件開發。

.NET平台

官方給出了一張表

image

目前一起有9個平台,其中 Windows Phone、Silverlight停止更新就還剩下7個平台。

.NET Platform Standard

為什么推出?

現有的平台已經夠多了,為什么還再推出一個新平台?

目標

  1. 提供更好的可移植性在未來的.NET版本中
  2. 更容易理解平台版本

簡單的說就是,微軟覺得.NET平台太多了,想進行統一從而推出了netstandard。

大家可以將netstandard理解為一個公共類庫,不同的平台可以兼容這個公共類庫。

兼容關系

netstandard的兼容

在以前的.NET Framework中API幾乎都是向下兼容的,也就是說.NET3.5兼容.NET2.0、.NET4兼容.NET3.5,具體的層次如下:

2.x < 3.x < 4.x

netstandard也是一樣。

1.0 < 1.1 < 1.2 < 1.3 < 1.4 < 1.5 < 1.6

平台之間的兼容

對照上表netstandard支持的最低.net framework版本是4.5,也就是說.net4.5 支持netstandard1.1和以后的版本。

舉個例子(按照這個例子可以清楚的看懂上表的關系)

如果你開發的類庫配置為netstandard1.3,那么可以使用的平台有:

  1. .NET Framework4.6及以后的版本(4.6,4.6.1,4.6.2,4.6.3)
  2. .NET Core 1.0及以后的版本
  3. Universal Windows Platform 10.0及以后的版本
  4. Mono/Xamarin Platforms

開發環境

Visual Studio(推薦使用)

ps:如果已經安裝了 vs2015 update3 在安裝.NET Core 1.0.0 - VS 2015 Tooling Preview 2時還是提示沒有安裝update3,可以使用“SKIP_VSU_CHECK=1”這個參數忽略vs的檢查。

在命令行使用:“DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1”進行安裝。

Visual Studio Code

參考資料

https://www.microsoft.com/net/core

FAQ

支持.NET4之前的版本嗎?

支持,只不過.NET4之前的版本沒有對.NET Platform Standard進行兼容,可以單獨設置兼容.NET4,.NET3.5等。

使用.NET Core就一定可以跨平台嗎?

不一定,只有完全使用兼容.NET Platform Standard的類庫才可以跨平台運行。

包還原失敗怎么辦?

包還原失敗一般有兩種情況。

1.依賴的版本不對,比如框架目標為.netstandard1.6,依賴的包只支持.net45這樣包就無法解析。

2.網絡問題,重試或翻牆。

如何在舊項目上使用.NET Core相關的組件,如:依賴注入,日志?

使用.net4.6,可以兼容很大部分現代化組件。.net版本越高兼容的就越多。

寫在最后

這篇博文的主題本應該叫:擁抱.NET Core,開發第一個跨平台類庫(DbUtils),后面又改成:擁抱.NET Core,開發第一個跨平台類庫(1),而在撰寫過程中發現內容實在太多了,顧拆成了多個部分,今天先講一些基礎概念,后面在寫如何開發一個跨平台類庫。

ps:實踐型文章雖然很好看但還是推薦大家多閱讀理論文章,比較熟悉了原理其它的都很簡單,可以舉一反三。


免責聲明!

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



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