有关C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明
早在本月12日,微軟官方的.NET Blog發布了一篇名為《Building C# 8.0》的文章,介紹了很多C# 8.0的新特性。不過本文主要討論的并不是C# 8.0的新特性,而是存在于這篇文章中的一段文字:
Most of the C# 8.0 language features will run on any version of .NET. However, a few of them have platform dependencies.
Async streams, indexers and ranges all rely on new framework types that will be part of .NET Standard 2.1. As Immo describes in his post?Announcing .NET Standard 2.1, .NET Core 3.0 as well as Xamarin, Unity and Mono will all implement .NET Standard 2.1, but .NET Framework 4.8 will not. This means that the types required to use these features won’t be available when you target C# 8.0 to .NET Framework 4.8.
這里的文字說的是,文中所介紹的絕大部分C# 8.0的新特性都可以在任何版本的.NET上使用,唯獨有個別的功能需要在特定版本的.NET上才能使用。比如,Async streams,indexers and ranges這些特性都需要依賴于由.NET Standard 2.1引入的新類型,根據Immo在他的博客中所述,.NET Core 3.0、Xamarin、Unity以及Mono都會實現.NET Standard 2.1,而.NET Framework 4.8卻不會。這也就意味著,這些C# 8.0的新特性,無法在目標框架為.NET Framework 4.8的情況下使用,也就是說,這些C# 8.0的新特性,無法在經典的.NET環境中使用。如此看來,貌似與以前展示的.NET平臺架構有所出入,因為新版本的.NET Framework并不實現.NET Standard 2.1。
我在2018年3月24日上海MVP線下技術交流活動中,分享過C#7.x的新特性,并且做了一場演示,展示了將C# 7.2 target到.NET Framework 2.0的工程,并在2.0的工程中使用C# 7.2的語法特性進行開發。由此看來,這是完全可行的,前提是,我所使用的開發庫必須是可基于CLR 2.0運行的。你會發現,即使我使用C# 7.2,我仍然無法在一個2.0的工程中使用async/await的異步框架,原因是,async/await所依賴的TPL只能運行在4.0的CLR上,因此,C# 7.2可以target到.NET Framework 2.0,但是有一部分語言特性無法使用,這種情況同樣發生在上面的C# 8.0上。
據此分析,.NET Standard 2.1引入新的API(比如Span<>)需要修改.NET的公共語言運行時(Common Language Runtime,CLR),這樣的修改,對于.NET Core、Xamarin、Unity以及Mono這些重新設計的框架來說,應該更為方便;而對于經典.NET Framework這種具有歷史特點的框架來說,或許并不那么直接容易,所以,.NET團隊推后了經典.NET CLR的變更計劃,由此也就推后了.NET Framework對于C# 8.0新特性的支持計劃,因此,.NET Framework 4.8仍然只支持.NET Standard 2.0,部分C# 8.0的新特性無法使用。
經典.NET Framework的公共語言運行時(CLR)在整個.NET的發展進程中也就只出現過4個版本:1.0/1.1/2.0/4.0。 1.0和1.1基本上可以忽略不計了,估計現在已經沒有什么項目在用這兩個版本相對應的.NET Framework了。讓大家最為熟知的是.NET CLR 2.0和4.0的版本:CLR 2.0隨著Visual Studio 2005的發布,直到Visual Studio 2010的CLR 4.0,一共有5年時間;而2010年隨著Visual Studio 2010一起發布的.NET CLR 4.0,至今也有近9年的歷史了。隨著.NET Standard API的不斷擴展,相信不久的將來,我們會迎來一次CLR的版本升級,使得經典.NET Framework能夠更好地支持.NET Standard API以及新的編程語言特性,契合整個.NET的平臺架構。
原文地址:http://sunnycoding.cn/2018/11/27/csharp8-net-framework-4-8-and-net-standard-2-1-side-note/
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的有关C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式系统(微服务架构)的一致性和幂等性
- 下一篇: 领域驱动设计,让程序员心中有码