關於C#編譯器的版本資訊與相關知識整理

C#在2002年隨著Visual Studio .NET 2002被一併發表後,迄今也過了17個年頭,比較特別的是C#的進化能力非常的活躍,即便過了十幾年後到現在仍然是一個熱門度很高的語言,在2015年C# 6發表時,微軟正式把原本內建在.NET Framework的編譯器拆分,用以加速編譯器的推陳更新速度,並將其稱之為CAAS(Compiler-As-A-Service),代號為Roslyn。

C#歷代語言特性表

在這個Features Added in C# Language Versions頁面裡面,可以看到歷代的C#語言特性。

C#編譯器最新版本及最新發展進度

最新版本及最新發展進度都被集縮到nuget平台上的Microsoft.Net.Compilers下,在撰寫文章的今日可以看到已經發展到「3.0.0-beta4-final」,也就是即將推出的C# 8.0版本。初學者如果不知道要下載哪個版本,可以參考nuget網站給你的藍色建議(下載次數最多的)。

Microsoft.Net.Compilers版本與C#編譯器版本之對應說明

在nuget中的Microsoft.Net.Compilers(Roslyn)版本多如牛毛,對於一個沒有在追蹤C#編譯器的使用者來說難免初次相見一頭霧水,以下 DotNet Roslyn NuGet-packages 這個頁面可以詳細的查詢到編譯器版本號(Versions)對應C#版本號碼,例如下圖。

CodeDomProviders又是啥?

簡單的說,Roslyn只處理C#編譯器核心的問題,其他你要怎麼用就不是Roslyn團隊關心的事情,而微軟的伺服器網站架構是由ASP.NET團隊在負責的,那麼要如何讓使用者在ASP.NET架構下使用最新版的Roslyn特性,就要安裝「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」,否則你在VisualStudio寫的東西都會變成紅色蚯蚓。另外CodeDom也可以有效提升ASP.NET的執行期編譯效能。

在這邊可以下載CodeDom:Microsoft.CodeDom.Providers.DotNetCompilerPlatform

2021-01-12 資訊更新

  1. 在查詢.NET Framework 4.8相關資訊時發現,Microsoft.Net.Compilers被拋棄了,改成Microsoft.Net.Compilers.Toolset
  2. Roslyn與C#版本的對應表也被改網址到這裡了,找了非常久才被我找到,並順手將目前的資訊備份如下,以免下次又被改位址了。

Roslyn編譯器版本與C#版本號對應表(2023-07-17更新)

Roslyn與C#版本對照表(僅備份用途,內容不會再更新,欲知最新資訊請自己上GitHub看資料)
-----
Versions 1.x mean C# 6.0 and VB 14 (Visual Studio 2015 and updates). For instance, 1.3.2 corresponds to the most recent update (update 3) of Visual Studio 2015.
Version 2.0 means C# 7.0 and VB 15 (Visual Studio 2017 version 15.0).
Version 2.1 is still C# 7.0, but with a couple fixes (Visual Studio 2017 version 15.1).
Version 2.2 is still C# 7.0, but with a couple more fixes (Visual Studio 2017 version 15.2). Language version "default" was updated to mean "7.0".
Version 2.3 means C# 7.1 and VB 15.3 (Visual Studio 2017 version 15.3). For instance, 2.3.0-beta1 corresponds to Visual Studio 2017 version 15.3 (Preview 1).
Version 2.4 is still C# 7.1 and VB 15.3, but with a couple fixes (Visual Studio 2017 version 15.4).
Version 2.6 means C# 7.2 and VB 15.5 (Visual Studio 2017 version 15.5).
Version 2.7 means C# 7.2 and VB 15.5, but with a number of fixes (Visual Studio 2017 version 15.6).
Version 2.8 means C# 7.3 (Visual Studio 2017 version 15.7)
Version 2.9 is still C# 7.3 and VB 15.5, but with more fixes (Visual Studio 2017 version 15.8)
Version 2.10 is still C# 7.3 and VB 15.5, but a couple more fixes (Visual Studio 2017 version 15.9)
Version 3.0 includes a preview of C# 8.0 (Visual Studio 2019 version 16.0), but 2.11 was used for preview1.
Version 3.1 includes a preview of C# 8.0 (Visual Studio 2019 version 16.1)
Version 3.2 includes a preview of C# 8.0 (Visual Studio 2019 version 16.2)
Version 3.3 includes C# 8.0 (Visual Studio 2019 version 16.3, .NET Core 3.0)
Version 3.4 includes C# 8.0 (Visual Studio 2019 version 16.4, .NET Core 3.1)
Version 3.5 includes C# 8.0 (Visual Studio 2019 version 16.5, .NET Core 3.1)
Version 3.6 includes C# 8.0 (Visual Studio 2019 version 16.6, .NET Core 3.1)
Version 3.7 includes C# 8.0 (Visual Studio 2019 version 16.7, .NET Core 3.1)
Version 3.8 includes C# 9.0 (Visual Studio 2019 version 16.8, .NET 5)
Version 3.9 includes C# 9.0 (Visual Studio 2019 version 16.9, .NET 5)
Version 3.10 includes C# 9.0 (Visual Studio 2019 version 16.10, .NET 5)
Version 3.11 includes C# 9.0 (Visual Studio 2019 version 16.11, .NET 5)
Version 4.0 includes C# 10.0 (Visual Studio 2022 version 17.0, .NET 6)
Version 4.1 includes C# 10.0 (Visual Studio 2022 version 17.1, .NET 6)
Version 4.2 includes C# 10.0 (Visual Studio 2022 version 17.2, .NET 6)
Version 4.3.1 includes C# 10.0 (Visual Studio 2022 version 17.3, .NET 6)
Version 4.4 includes C# 11.0 (Visual Studio 2022 version 17.4, .NET 7)
Version 4.5 includes C# 11.0 (Visual Studio 2022 version 17.5, .NET 7)
Version 4.6 includes C# 11.0 (Visual Studio 2022 version 17.6, .NET 7)
C# CSharp Version Compiler-As-A-Service Roslyn Microsoft.Net.Compilers Microsoft.CodeDom.Providers.DotNetCompilerPlatform